@bbearai/react 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -790,7 +790,10 @@ function TestDetailScreen({ testId, nav }) {
790
790
  if (!client || !displayedAssignment || isSubmitting) return;
791
791
  setIsSubmitting(true);
792
792
  try {
793
- await client.updateAssignmentStatus(displayedAssignment.id, "failed");
793
+ const result = await client.updateAssignmentStatus(displayedAssignment.id, "failed");
794
+ if (!result.success) {
795
+ console.error("BugBear: Failed to mark assignment as failed", result.error);
796
+ }
794
797
  await refreshAssignments();
795
798
  nav.replace({
796
799
  name: "REPORT",
@@ -1540,7 +1543,16 @@ var import_jsx_runtime4 = require("react/jsx-runtime");
1540
1543
  function TestListScreen({ nav }) {
1541
1544
  const { assignments, currentAssignment, refreshAssignments } = useBugBear();
1542
1545
  const [filter, setFilter] = (0, import_react5.useState)("all");
1546
+ const [roleFilter, setRoleFilter] = (0, import_react5.useState)(null);
1543
1547
  const [collapsedFolders, setCollapsedFolders] = (0, import_react5.useState)(/* @__PURE__ */ new Set());
1548
+ const availableRoles = (0, import_react5.useMemo)(() => {
1549
+ const roleMap = /* @__PURE__ */ new Map();
1550
+ for (const a of assignments) {
1551
+ if (a.testCase.role) roleMap.set(a.testCase.role.id, a.testCase.role);
1552
+ }
1553
+ return Array.from(roleMap.values());
1554
+ }, [assignments]);
1555
+ const selectedRole = availableRoles.find((r) => r.id === roleFilter);
1544
1556
  const groupedAssignments = (0, import_react5.useMemo)(() => {
1545
1557
  const groups = /* @__PURE__ */ new Map();
1546
1558
  for (const assignment of assignments) {
@@ -1594,6 +1606,7 @@ function TestListScreen({ nav }) {
1594
1606
  });
1595
1607
  }, []);
1596
1608
  const filterAssignment = (a) => {
1609
+ if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
1597
1610
  if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
1598
1611
  if (filter === "completed") return a.status === "passed" || a.status === "failed";
1599
1612
  return true;
@@ -1626,7 +1639,7 @@ function TestListScreen({ nav }) {
1626
1639
  }
1627
1640
  };
1628
1641
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { children: [
1629
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: 16 }, children: filters.map((f) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1642
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { display: "flex", gap: 8, marginBottom: availableRoles.length >= 2 ? 8 : 16 }, children: filters.map((f) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1630
1643
  "button",
1631
1644
  {
1632
1645
  type: "button",
@@ -1653,6 +1666,79 @@ function TestListScreen({ nav }) {
1653
1666
  },
1654
1667
  f.key
1655
1668
  )) }),
1669
+ availableRoles.length >= 2 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { marginBottom: 12 }, children: [
1670
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: 6, flexWrap: "wrap", marginBottom: selectedRole?.loginHint ? 8 : 0 }, children: [
1671
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1672
+ "button",
1673
+ {
1674
+ type: "button",
1675
+ onClick: () => setRoleFilter(null),
1676
+ style: {
1677
+ paddingLeft: 10,
1678
+ paddingRight: 10,
1679
+ paddingTop: 4,
1680
+ paddingBottom: 4,
1681
+ borderRadius: 6,
1682
+ backgroundColor: !roleFilter ? colors.card : "transparent",
1683
+ border: !roleFilter ? `1px solid ${colors.border}` : "1px solid transparent",
1684
+ cursor: "pointer",
1685
+ fontSize: 11,
1686
+ color: !roleFilter ? colors.textPrimary : colors.textMuted,
1687
+ fontWeight: !roleFilter ? 600 : 400
1688
+ },
1689
+ children: "All Roles"
1690
+ }
1691
+ ),
1692
+ availableRoles.map((role) => {
1693
+ const isActive = roleFilter === role.id;
1694
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1695
+ "button",
1696
+ {
1697
+ type: "button",
1698
+ onClick: () => setRoleFilter(isActive ? null : role.id),
1699
+ style: {
1700
+ display: "flex",
1701
+ alignItems: "center",
1702
+ gap: 5,
1703
+ paddingLeft: 10,
1704
+ paddingRight: 10,
1705
+ paddingTop: 4,
1706
+ paddingBottom: 4,
1707
+ borderRadius: 6,
1708
+ backgroundColor: isActive ? role.color + "20" : "transparent",
1709
+ border: isActive ? `1px solid ${role.color}60` : "1px solid transparent",
1710
+ cursor: "pointer",
1711
+ fontSize: 11,
1712
+ color: isActive ? role.color : colors.textMuted,
1713
+ fontWeight: isActive ? 600 : 400
1714
+ },
1715
+ children: [
1716
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: {
1717
+ width: 6,
1718
+ height: 6,
1719
+ borderRadius: 3,
1720
+ backgroundColor: role.color,
1721
+ flexShrink: 0
1722
+ } }),
1723
+ role.name
1724
+ ]
1725
+ },
1726
+ role.id
1727
+ );
1728
+ })
1729
+ ] }),
1730
+ selectedRole?.loginHint && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: {
1731
+ fontSize: 11,
1732
+ color: colors.textSecondary,
1733
+ backgroundColor: selectedRole.color + "10",
1734
+ border: `1px solid ${selectedRole.color}30`,
1735
+ borderRadius: 6,
1736
+ padding: "6px 10px"
1737
+ }, children: [
1738
+ "Log in as: ",
1739
+ selectedRole.loginHint
1740
+ ] })
1741
+ ] }),
1656
1742
  groupedAssignments.map((folder) => {
1657
1743
  const folderId = folder.group?.id || "ungrouped";
1658
1744
  const isCollapsed = collapsedFolders.has(folderId);
@@ -1825,7 +1911,26 @@ function TestListScreen({ nav }) {
1825
1911
  },
1826
1912
  children: assignment.testCase.priority
1827
1913
  }
1828
- )
1914
+ ),
1915
+ assignment.testCase.role && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
1916
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
1917
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { style: {
1918
+ display: "inline-flex",
1919
+ alignItems: "center",
1920
+ gap: 3,
1921
+ fontSize: 10,
1922
+ color: assignment.testCase.role.color,
1923
+ fontWeight: 500
1924
+ }, children: [
1925
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { style: {
1926
+ width: 5,
1927
+ height: 5,
1928
+ borderRadius: 3,
1929
+ backgroundColor: assignment.testCase.role.color
1930
+ } }),
1931
+ assignment.testCase.role.name
1932
+ ] })
1933
+ ] })
1829
1934
  ] })
1830
1935
  ] }),
1831
1936
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
@@ -2385,6 +2490,7 @@ function ReportScreen({ nav, prefill }) {
2385
2490
  const observedRoute = (0, import_react8.useRef)(
2386
2491
  typeof window !== "undefined" ? window.location.pathname : "unknown"
2387
2492
  );
2493
+ const isRetestFailure = prefill?.type === "test_fail";
2388
2494
  const isBugType = reportType === "bug" || reportType === "test_fail";
2389
2495
  const handleSubmit = async () => {
2390
2496
  if (!client || !description.trim() || images.isUploading) return;
@@ -2433,7 +2539,68 @@ function ReportScreen({ nav, prefill }) {
2433
2539
  { sev: "medium", color: "#eab308" },
2434
2540
  { sev: "low", color: "#6b7280" }
2435
2541
  ];
2436
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { children: [
2542
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { children: isRetestFailure ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
2543
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles2.retestBanner, children: [
2544
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
2545
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { children: [
2546
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.retestTitle, children: "Bug Still Present" }),
2547
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.retestSubtitle, children: "The fix did not resolve this issue" })
2548
+ ] })
2549
+ ] }),
2550
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles2.section, children: [
2551
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.label, children: "Severity" }),
2552
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2553
+ "button",
2554
+ {
2555
+ onClick: () => setSeverity(sev),
2556
+ style: {
2557
+ ...styles2.sevButton,
2558
+ ...severity === sev ? { backgroundColor: `${color}30`, borderColor: color } : {}
2559
+ },
2560
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
2561
+ },
2562
+ sev
2563
+ )) })
2564
+ ] }),
2565
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { style: styles2.section, children: [
2566
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.label, children: "What went wrong?" }),
2567
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2568
+ "textarea",
2569
+ {
2570
+ style: styles2.descInput,
2571
+ value: description,
2572
+ onChange: (e) => setDescription(e.target.value),
2573
+ placeholder: "Describe what you observed. What still doesn't work?",
2574
+ rows: 4
2575
+ }
2576
+ )
2577
+ ] }),
2578
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2579
+ ImagePickerButtons,
2580
+ {
2581
+ images: images.images,
2582
+ maxImages: 5,
2583
+ onPickGallery: images.pickFromGallery,
2584
+ onPickCamera: images.pickFromCamera,
2585
+ onRemove: images.removeImage,
2586
+ label: "Attachments (optional)"
2587
+ }
2588
+ ),
2589
+ error && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.errorBanner, children: error }),
2590
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
2591
+ "button",
2592
+ {
2593
+ style: {
2594
+ ...styles2.submitButton,
2595
+ ...styles2.submitButtonRetest,
2596
+ ...!description.trim() || submitting || images.isUploading ? styles2.submitButtonDisabled : {}
2597
+ },
2598
+ onClick: handleSubmit,
2599
+ disabled: !description.trim() || submitting || images.isUploading,
2600
+ children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest"
2601
+ }
2602
+ )
2603
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
2437
2604
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.label, children: "What are you reporting?" }),
2438
2605
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: styles2.typeRow, children: typeOptions.map(({ type, label, icon }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
2439
2606
  "button",
@@ -2540,7 +2707,7 @@ function ReportScreen({ nav, prefill }) {
2540
2707
  children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Report"
2541
2708
  }
2542
2709
  )
2543
- ] });
2710
+ ] }) });
2544
2711
  }
2545
2712
  var styles2 = {
2546
2713
  label: {
@@ -2663,6 +2830,31 @@ var styles2 = {
2663
2830
  submitButtonDisabled: {
2664
2831
  opacity: 0.5,
2665
2832
  cursor: "not-allowed"
2833
+ },
2834
+ submitButtonRetest: {
2835
+ backgroundColor: "#b45309"
2836
+ },
2837
+ retestBanner: {
2838
+ display: "flex",
2839
+ flexDirection: "row",
2840
+ alignItems: "center",
2841
+ gap: 10,
2842
+ backgroundColor: "#422006",
2843
+ border: "1px solid #854d0e",
2844
+ borderRadius: 10,
2845
+ padding: "12px 14px",
2846
+ marginBottom: 20
2847
+ },
2848
+ retestTitle: {
2849
+ fontSize: 15,
2850
+ fontWeight: 600,
2851
+ color: "#fbbf24",
2852
+ lineHeight: "20px"
2853
+ },
2854
+ retestSubtitle: {
2855
+ fontSize: 12,
2856
+ color: "#d97706",
2857
+ lineHeight: "16px"
2666
2858
  }
2667
2859
  };
2668
2860
 
package/dist/index.mjs CHANGED
@@ -761,7 +761,10 @@ function TestDetailScreen({ testId, nav }) {
761
761
  if (!client || !displayedAssignment || isSubmitting) return;
762
762
  setIsSubmitting(true);
763
763
  try {
764
- await client.updateAssignmentStatus(displayedAssignment.id, "failed");
764
+ const result = await client.updateAssignmentStatus(displayedAssignment.id, "failed");
765
+ if (!result.success) {
766
+ console.error("BugBear: Failed to mark assignment as failed", result.error);
767
+ }
765
768
  await refreshAssignments();
766
769
  nav.replace({
767
770
  name: "REPORT",
@@ -1511,7 +1514,16 @@ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-run
1511
1514
  function TestListScreen({ nav }) {
1512
1515
  const { assignments, currentAssignment, refreshAssignments } = useBugBear();
1513
1516
  const [filter, setFilter] = useState3("all");
1517
+ const [roleFilter, setRoleFilter] = useState3(null);
1514
1518
  const [collapsedFolders, setCollapsedFolders] = useState3(/* @__PURE__ */ new Set());
1519
+ const availableRoles = useMemo(() => {
1520
+ const roleMap = /* @__PURE__ */ new Map();
1521
+ for (const a of assignments) {
1522
+ if (a.testCase.role) roleMap.set(a.testCase.role.id, a.testCase.role);
1523
+ }
1524
+ return Array.from(roleMap.values());
1525
+ }, [assignments]);
1526
+ const selectedRole = availableRoles.find((r) => r.id === roleFilter);
1515
1527
  const groupedAssignments = useMemo(() => {
1516
1528
  const groups = /* @__PURE__ */ new Map();
1517
1529
  for (const assignment of assignments) {
@@ -1565,6 +1577,7 @@ function TestListScreen({ nav }) {
1565
1577
  });
1566
1578
  }, []);
1567
1579
  const filterAssignment = (a) => {
1580
+ if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
1568
1581
  if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
1569
1582
  if (filter === "completed") return a.status === "passed" || a.status === "failed";
1570
1583
  return true;
@@ -1597,7 +1610,7 @@ function TestListScreen({ nav }) {
1597
1610
  }
1598
1611
  };
1599
1612
  return /* @__PURE__ */ jsxs3("div", { children: [
1600
- /* @__PURE__ */ jsx4("div", { style: { display: "flex", gap: 8, marginBottom: 16 }, children: filters.map((f) => /* @__PURE__ */ jsxs3(
1613
+ /* @__PURE__ */ jsx4("div", { style: { display: "flex", gap: 8, marginBottom: availableRoles.length >= 2 ? 8 : 16 }, children: filters.map((f) => /* @__PURE__ */ jsxs3(
1601
1614
  "button",
1602
1615
  {
1603
1616
  type: "button",
@@ -1624,6 +1637,79 @@ function TestListScreen({ nav }) {
1624
1637
  },
1625
1638
  f.key
1626
1639
  )) }),
1640
+ availableRoles.length >= 2 && /* @__PURE__ */ jsxs3("div", { style: { marginBottom: 12 }, children: [
1641
+ /* @__PURE__ */ jsxs3("div", { style: { display: "flex", gap: 6, flexWrap: "wrap", marginBottom: selectedRole?.loginHint ? 8 : 0 }, children: [
1642
+ /* @__PURE__ */ jsx4(
1643
+ "button",
1644
+ {
1645
+ type: "button",
1646
+ onClick: () => setRoleFilter(null),
1647
+ style: {
1648
+ paddingLeft: 10,
1649
+ paddingRight: 10,
1650
+ paddingTop: 4,
1651
+ paddingBottom: 4,
1652
+ borderRadius: 6,
1653
+ backgroundColor: !roleFilter ? colors.card : "transparent",
1654
+ border: !roleFilter ? `1px solid ${colors.border}` : "1px solid transparent",
1655
+ cursor: "pointer",
1656
+ fontSize: 11,
1657
+ color: !roleFilter ? colors.textPrimary : colors.textMuted,
1658
+ fontWeight: !roleFilter ? 600 : 400
1659
+ },
1660
+ children: "All Roles"
1661
+ }
1662
+ ),
1663
+ availableRoles.map((role) => {
1664
+ const isActive = roleFilter === role.id;
1665
+ return /* @__PURE__ */ jsxs3(
1666
+ "button",
1667
+ {
1668
+ type: "button",
1669
+ onClick: () => setRoleFilter(isActive ? null : role.id),
1670
+ style: {
1671
+ display: "flex",
1672
+ alignItems: "center",
1673
+ gap: 5,
1674
+ paddingLeft: 10,
1675
+ paddingRight: 10,
1676
+ paddingTop: 4,
1677
+ paddingBottom: 4,
1678
+ borderRadius: 6,
1679
+ backgroundColor: isActive ? role.color + "20" : "transparent",
1680
+ border: isActive ? `1px solid ${role.color}60` : "1px solid transparent",
1681
+ cursor: "pointer",
1682
+ fontSize: 11,
1683
+ color: isActive ? role.color : colors.textMuted,
1684
+ fontWeight: isActive ? 600 : 400
1685
+ },
1686
+ children: [
1687
+ /* @__PURE__ */ jsx4("span", { style: {
1688
+ width: 6,
1689
+ height: 6,
1690
+ borderRadius: 3,
1691
+ backgroundColor: role.color,
1692
+ flexShrink: 0
1693
+ } }),
1694
+ role.name
1695
+ ]
1696
+ },
1697
+ role.id
1698
+ );
1699
+ })
1700
+ ] }),
1701
+ selectedRole?.loginHint && /* @__PURE__ */ jsxs3("div", { style: {
1702
+ fontSize: 11,
1703
+ color: colors.textSecondary,
1704
+ backgroundColor: selectedRole.color + "10",
1705
+ border: `1px solid ${selectedRole.color}30`,
1706
+ borderRadius: 6,
1707
+ padding: "6px 10px"
1708
+ }, children: [
1709
+ "Log in as: ",
1710
+ selectedRole.loginHint
1711
+ ] })
1712
+ ] }),
1627
1713
  groupedAssignments.map((folder) => {
1628
1714
  const folderId = folder.group?.id || "ungrouped";
1629
1715
  const isCollapsed = collapsedFolders.has(folderId);
@@ -1796,7 +1882,26 @@ function TestListScreen({ nav }) {
1796
1882
  },
1797
1883
  children: assignment.testCase.priority
1798
1884
  }
1799
- )
1885
+ ),
1886
+ assignment.testCase.role && /* @__PURE__ */ jsxs3(Fragment2, { children: [
1887
+ /* @__PURE__ */ jsx4("span", { style: { fontSize: 11, color: colors.textDim }, children: "\xB7" }),
1888
+ /* @__PURE__ */ jsxs3("span", { style: {
1889
+ display: "inline-flex",
1890
+ alignItems: "center",
1891
+ gap: 3,
1892
+ fontSize: 10,
1893
+ color: assignment.testCase.role.color,
1894
+ fontWeight: 500
1895
+ }, children: [
1896
+ /* @__PURE__ */ jsx4("span", { style: {
1897
+ width: 5,
1898
+ height: 5,
1899
+ borderRadius: 3,
1900
+ backgroundColor: assignment.testCase.role.color
1901
+ } }),
1902
+ assignment.testCase.role.name
1903
+ ] })
1904
+ ] })
1800
1905
  ] })
1801
1906
  ] }),
1802
1907
  /* @__PURE__ */ jsx4(
@@ -2343,7 +2448,7 @@ var styles = {
2343
2448
 
2344
2449
  // src/widget/screens/ReportScreen.tsx
2345
2450
  import { useState as useState6, useRef as useRef2 } from "react";
2346
- import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
2451
+ import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
2347
2452
  function ReportScreen({ nav, prefill }) {
2348
2453
  const { client, refreshAssignments, uploadImage } = useBugBear();
2349
2454
  const images = useImageAttachments(uploadImage, 5, "screenshots");
@@ -2356,6 +2461,7 @@ function ReportScreen({ nav, prefill }) {
2356
2461
  const observedRoute = useRef2(
2357
2462
  typeof window !== "undefined" ? window.location.pathname : "unknown"
2358
2463
  );
2464
+ const isRetestFailure = prefill?.type === "test_fail";
2359
2465
  const isBugType = reportType === "bug" || reportType === "test_fail";
2360
2466
  const handleSubmit = async () => {
2361
2467
  if (!client || !description.trim() || images.isUploading) return;
@@ -2404,7 +2510,68 @@ function ReportScreen({ nav, prefill }) {
2404
2510
  { sev: "medium", color: "#eab308" },
2405
2511
  { sev: "low", color: "#6b7280" }
2406
2512
  ];
2407
- return /* @__PURE__ */ jsxs7("div", { children: [
2513
+ return /* @__PURE__ */ jsx8("div", { children: isRetestFailure ? /* @__PURE__ */ jsxs7(Fragment3, { children: [
2514
+ /* @__PURE__ */ jsxs7("div", { style: styles2.retestBanner, children: [
2515
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: 16 }, children: "\u{1F504}" }),
2516
+ /* @__PURE__ */ jsxs7("div", { children: [
2517
+ /* @__PURE__ */ jsx8("div", { style: styles2.retestTitle, children: "Bug Still Present" }),
2518
+ /* @__PURE__ */ jsx8("div", { style: styles2.retestSubtitle, children: "The fix did not resolve this issue" })
2519
+ ] })
2520
+ ] }),
2521
+ /* @__PURE__ */ jsxs7("div", { style: styles2.section, children: [
2522
+ /* @__PURE__ */ jsx8("div", { style: styles2.label, children: "Severity" }),
2523
+ /* @__PURE__ */ jsx8("div", { style: styles2.severityRow, children: severityOptions.map(({ sev, color }) => /* @__PURE__ */ jsx8(
2524
+ "button",
2525
+ {
2526
+ onClick: () => setSeverity(sev),
2527
+ style: {
2528
+ ...styles2.sevButton,
2529
+ ...severity === sev ? { backgroundColor: `${color}30`, borderColor: color } : {}
2530
+ },
2531
+ children: /* @__PURE__ */ jsx8("span", { style: { ...styles2.sevText, ...severity === sev ? { color } : {} }, children: sev })
2532
+ },
2533
+ sev
2534
+ )) })
2535
+ ] }),
2536
+ /* @__PURE__ */ jsxs7("div", { style: styles2.section, children: [
2537
+ /* @__PURE__ */ jsx8("div", { style: styles2.label, children: "What went wrong?" }),
2538
+ /* @__PURE__ */ jsx8(
2539
+ "textarea",
2540
+ {
2541
+ style: styles2.descInput,
2542
+ value: description,
2543
+ onChange: (e) => setDescription(e.target.value),
2544
+ placeholder: "Describe what you observed. What still doesn't work?",
2545
+ rows: 4
2546
+ }
2547
+ )
2548
+ ] }),
2549
+ /* @__PURE__ */ jsx8(
2550
+ ImagePickerButtons,
2551
+ {
2552
+ images: images.images,
2553
+ maxImages: 5,
2554
+ onPickGallery: images.pickFromGallery,
2555
+ onPickCamera: images.pickFromCamera,
2556
+ onRemove: images.removeImage,
2557
+ label: "Attachments (optional)"
2558
+ }
2559
+ ),
2560
+ error && /* @__PURE__ */ jsx8("div", { style: styles2.errorBanner, children: error }),
2561
+ /* @__PURE__ */ jsx8(
2562
+ "button",
2563
+ {
2564
+ style: {
2565
+ ...styles2.submitButton,
2566
+ ...styles2.submitButtonRetest,
2567
+ ...!description.trim() || submitting || images.isUploading ? styles2.submitButtonDisabled : {}
2568
+ },
2569
+ onClick: handleSubmit,
2570
+ disabled: !description.trim() || submitting || images.isUploading,
2571
+ children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Failed Retest"
2572
+ }
2573
+ )
2574
+ ] }) : /* @__PURE__ */ jsxs7(Fragment3, { children: [
2408
2575
  /* @__PURE__ */ jsx8("div", { style: styles2.label, children: "What are you reporting?" }),
2409
2576
  /* @__PURE__ */ jsx8("div", { style: styles2.typeRow, children: typeOptions.map(({ type, label, icon }) => /* @__PURE__ */ jsxs7(
2410
2577
  "button",
@@ -2511,7 +2678,7 @@ function ReportScreen({ nav, prefill }) {
2511
2678
  children: images.isUploading ? "Uploading images..." : submitting ? "Submitting..." : error ? "Retry" : "Submit Report"
2512
2679
  }
2513
2680
  )
2514
- ] });
2681
+ ] }) });
2515
2682
  }
2516
2683
  var styles2 = {
2517
2684
  label: {
@@ -2634,6 +2801,31 @@ var styles2 = {
2634
2801
  submitButtonDisabled: {
2635
2802
  opacity: 0.5,
2636
2803
  cursor: "not-allowed"
2804
+ },
2805
+ submitButtonRetest: {
2806
+ backgroundColor: "#b45309"
2807
+ },
2808
+ retestBanner: {
2809
+ display: "flex",
2810
+ flexDirection: "row",
2811
+ alignItems: "center",
2812
+ gap: 10,
2813
+ backgroundColor: "#422006",
2814
+ border: "1px solid #854d0e",
2815
+ borderRadius: 10,
2816
+ padding: "12px 14px",
2817
+ marginBottom: 20
2818
+ },
2819
+ retestTitle: {
2820
+ fontSize: 15,
2821
+ fontWeight: 600,
2822
+ color: "#fbbf24",
2823
+ lineHeight: "20px"
2824
+ },
2825
+ retestSubtitle: {
2826
+ fontSize: 12,
2827
+ color: "#d97706",
2828
+ lineHeight: "16px"
2637
2829
  }
2638
2830
  };
2639
2831
 
@@ -3823,7 +4015,7 @@ var styles4 = {
3823
4015
  var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgri4oBIAAAq4ElEQVR4Ae19B3gd1bXuPzOnnyPpqFfLstxkuQM22MZgmsGAacFAILQb4F4ghRJqCp0ESEIgkAAJCRACOBhw6MTEFhgwxrhhIxdZltWt3s7R6bPfv+ZIhst79/ueLTlw82nj0Wkze/Zea+1V/rX2AIy0EQqMUGCEAiMUGKHACAVGKDBCgREKjFBghAIjFBihwAgFRigwQoERCoxQYIQCIxT4BlJAKWgLFiyw5ebmetPT09PkyMjISC0pKXHdfvvtugK0b+Cw/8chfaMHK8RM8fmy4/H4lLhSM8x4fIIJjIOpcqHg5azsPGQO/BphHkFoWqNuaLsMw9hh0/WNDodjR09PTxd/+0a2byQDnCnOiWbUXBSPm4tUQs0AVM4g9dxODaluwMNXF8mvawoJkj8SA/ojQG9IIRQdPNt6bdQM41Ob3fa6z+3+R2dnZ72m8aJvSPvGMKCgoMDT3t5+asxMXKzi5tGkj9dmABPyNcwao2H2GGDKKIXiLCDdo8Fpo/jzIHNAtWQxIRzX0BkE6tqBrQ3AJ7uBdbsVdu4lkxJyrtZtGPq7Npfx5JxZc96tqKiIy7dfZ/vaGSC6nFJ5QSyR+B5Vy1QhxqElGs48TMMplP2powCDmr29B6huA3a1aqjtANp6NQTCJuKUfruRXBXZaQqjMjWM43oZm62QmQbE4zq21AGvbwJeWqewuVa0FVlhM9a67PaHysvLl61fv57r5+tpXysDDIfjrEQs/jOK8HSHXcPpM3VceazCgkkmopTYD6t0vLNFw+odJnY2K3QE/v81R1aKhokFOo6aqOHk6cCc8bzWVHj3c+CxVTre2GQiFqdFt+mrPV7XnYHuwD+/SarpoIqDy+UqpV5+kTdRMumzDjPU+jt0pZ7T1M5f6uqWxYaakG85NELxgYOf7Q4Fj08hNUNp/iyl8VVP8Sff+ynyfA+3V8HG82Dp+eS1vMfkUbq641u62vMb3ucFQ318u00tnmkMnKcn7E774zk5ObkHdeL/j87/5SuAXsnZ0Xj8IZhmwZQiHb84h6pmlsLWGuCBN3W89KmJIFWL1QwqebcXmtsHuGh5bQ4gFoEK9AIhKnuTmsM0oeWXQLnoFClex88w49BE6UfFKndChfv3Td3v1XHuHB3Xn2hifCGw/BMdt/xNYXuTCd1m7Ezxeq+m1/Tuvgv+jd4Yus12JyUzIVJ/9fE2FXhCV52/19U1i2zK6xSJT0q75vYoLbtQYfREhTHlCmMnK23MJKWlU8oHzsnwu6g/KOVycCUgI9e6RisYo7SSiUorLOVqSd13/n9bEewj1a2pm7jSev+gqZ4/6Oq/jrPxXOlPDzndzh8qpf7lwnnweF1U5NYN/RmZYKZPV3+9yrDUzfJrbGpsrqiBATUj6iOvOEl0IXhWHpkwwTo0D3/jeWXjstRLjy5Ux88t+OI6fi9M1XX2w1fN4eRvuvI4DfUfS8rU334zX334l6PUO0/MUffdMF0dOTufvydV1KQiXb19E8ez1FB//k+bSvcmVZ/T6XxIAr6DR5R/Vc/0cjRDe0WINz7PUOvu0lXiL5r60ck2EmxA6u1OpeUUkfCTrEMrLVcaJVqu0VxuHh7r/eITxqnWisVq92OjVGaaU1149hT1zAML1BoS9/n7pqtZ5SnWeXLdZBJ2zR+mKrXmcKXeyFPqlVSllqcptaJIxT84VL308Bw1tiTdOp9elPrpWSIUvOYOQ43JSdoGh8vxzKJFi5wHk1QHdZmNGzfOWVNT81wikThrVqmBF78PpNKGXvx7Ha9tsBxzhrppUOn0G20UNtHnGoeUiEM17aEP+YV3uPDIYrx0x1h469fQx1foHXci5k0MALXb8btXu3Hv8ggaO5N9FmXqqPiZHSW5bnQ19cBF04GEAlcIxKxo9Lgc2emoUaU4/64mfLy+yaLxkiMM/OlyE02ddIMf0lDZYMLhsj8994i5lx2smOGgMUBwmTvvuutx0zQv06gZhAGZVMlVnOuulqSRpQcDMyufFCFlTCEeBVLe08gaHY1YNCsVr6/tRVlJGlbePwZZ3VsRi8ZhS/XBkZGCxk3NuGmZDSvqXcjP8yIcU6hv7EOuN4ynLzMw3m6iizzqYiDWTTvcm9CQR6GfUMJgjgssbtrRnjUd86+rQiMZJe2oSTqW/YAM7tdw6i81bG824XQ7Hgz3h68XNWedNIx/DhoDbDbbrfFE4h4rTB0YsM1uh/j7URKRMAO/5e1dHmjpWV94McKA1iYUp4Tx5nXpuOQ3rbjuuyU4p6QBkTC9Gl1Lwg9KR3V7DvZ683HoWB3pqXa6+Rp2ksF3P9uE5f+sx5WzNSzKNrGqQcPT28mMiAYfbe25ZRquPhY0L0BHLAV3vuvGE8tbOByOh2H13AkGXrueK6FLx8L7FJq7FHw+79WBQOB3w0h7q6uDwgC6mudEo9FneQd7yahUfOe0Uhw/JwfFeS5GrSY6emJYu7kNS1+twsr1fcmBpGUkVZHIWGMdjiwz8colOvbUxeDPtSHDEYKbwZUykwwQHMKeXwyjdy86a4NoIf3e3g68ulNHVbcNjR1UX5zdfLq6H9PFPDY/A4sK/WiPxPFsdSt+cFgYly7S8Wa1gWtfSKC1JwFNxhAJEdYLYeE0Ha9er1BRqeOMX0tgqPX7/f7jGbWvsQY8TH+ItgxvI/HPJ/GfYq+Oqy+ahmd/MROLZ8dR4miCP1KLlEgT8p1dOHSaAxefWoBpRSbWVobRTRBHE3+9l8BlPITZE2w4sTQBm6yWQAKp2RROaikbFbq4+wL+mP1d6G6No6ndg5veceGRj6II6U40d8Zw6SQN3znEjj9uimNhQSauL89Hjs+JsSkuTErxoLI3gPKMOFx+A799l5AQDYRGlcgAz4oxqpvi2NtD5pxiwsZV+e5W005UdnZpaelfyQQuxeFpw8oAj8czKxKJLKN343ngljm4+7t+uJo+RbRmF2JtHUj09iHWHUR3XS96atphi/dh2oxsLJoax8rNMbRxXlk+Ez8604NbznDwvCgSUfEsNdTXiwGlCskwoMgUk6oioRvo69GQku7G/GNKaFwNjCEWdMWZY/CPLWH0tIewp8/AjVMKkEObkZmfCXeaFy4ae7sWQboviFZiRS+so/FnwKcyGQizT83JoK+/Dxt2J5CbauCaRSY+3mUQDonnhkIhGxmxYnjIz9sNV0clTIhwcL9lAOO7/vIZuP4MhfCm9xBpbIMZlsiUn3sVAp2cLAng0E1EWvsQ3LEbE/39ePwcHX5CzKfPcODHR8WQr/UiGk6gjoTvoH0sKNaRkkk9Hxr0jKiOQiY21Tpw5oP9uOqubTCiJHhbDIm2Pfj9TWOwNubHKKcdo9M88GenwbDrsBNG9ef4ke4yQAwPNfR4rCZEF51FvIhWF3SDra9vZZS8jTbkwQsU/B4d4Ujke1lZWYckLxr632FbAf39/WfR3bxm2qRcPHtTNsxtn5BYcU6a86HkbqYEvbmJS3kzoeJdxO+7NRgEw9yOBD0bwje9CZgBDRU7EjhxTAJpmYrf6yS8Bg/DAJcLSCHaaYVsVAliq3W66xOpqtriduyqi6PcFkJjSwxvb0vgRws6cfoJE7BiC79nAmF0rt+CrGU10TNDf38dMjKieIWA3+Z6rrJMusL0UcVjs/4JQxIxhAMhC4G99mQKEMdTsc20c54FXAUv3HHHHUPmwLAxgCO/nbq5/J4rRmFaYgeizIrYHZyOZuCO13R8/8UECaNjXaOOt/eYPBQiQQ2FFLogYZ1gSIOd9q8ppGPRTOJqqSS4HISBfHx1kAEW8QemLA5LLKqhqTqOYjJib9yGm8/UsJCoZzZtRbDXxLyyTkw7ohx3vt6M2Vmp8FDke6kC+3rbYRiNiHsM3LcygQA8gD+T/ZMRX+pfc/L7YC+qmxMoyzdw4TyFpWs1tPeZ4x5+6KFV4XC4bqgcGBYGZGdn+4LB/ruz0+3+86Yl0FLbh7HFNJh0GW9+UcMj7+i4dFw+rhifgzOKM7AgLw2SPHluZxhdJPwUxgd9dIbi/eICEkaeKBkv6ni6lXuJ+1Mr0+kR2Rwkj3iMmoX1NzcSc+s3kWZXKKJBzyF6UUZ1dfPLGqHsBM6Z2YeMsaW494XtmEFG9Qf6YOq1SM+I4c/bDayuYq+5BfTXHBYthbHJ2/CNwTvLUusPYFuzhquO50qlsX77M6VzaKnxWOzFoa6CYbEBRA9PVMosKWAC5Ml3++DOoq7lZKuov5//ELhtZhFOL/ajMN3DQMiLsiwfrpmUj++V5eLlnQov79Jgo/RJWjHbT2KSISu2GTjhVxqm/kThmmUGmSFskJb8y9OpqknsqWQYXcYT55pw854S8XbGDdRrLvzlY2DBT7pwypgWTDkyG09V7UZmVi186WG8WGfHU2tomzKyGYNQ0kX381+y/+Q9rBjGx0lRHUlU/NwaHZfMJ6Np6KOR6CIKHiOJobVhWQEcwj00vpN6ggo9TI3fuIj5REpwxUZKdVcWTipOR2puOtJpCH30Qjw0igaN43iXDb30y1+p6ccJo5lmZEel4whJVxr49mMms+wO3HZpFi5a6EUKPxFFGpjtIIFkJVAqKf02yQ9zNqap02bYcfmSApxwRBpeWRtDe3Mb7v1uLh5YFcGezn78dYeBlzYloMTlFNUz2OtAt4OfOSd2Snsjy4JeUUO3ju8tZJzI1w93mnbakk7agorB8w/kdcgrwOv15nEgR4vkhGP0bHjQtlrIgh514OicVHjTffDR97bmx98MLusUMiK9MAsXluUh1XCgnioom/T4lDbiqmcSmDnRjY8ezMYPju7H6GgbYoEYiTsQhA0ag336guqJOsFy6qj2tHgUPZuqaYta8eataehTHti7avCTi/Px/FaFDQ2cdt4oEp83FCLLwb6UqBse/JRs8pmjVl4aIbsTG2tMvL9Nw7ePYG6ImBLzGmdNnjw5qbsGr9nP1yGvAErHSfQKLl40zUBeqoaqFoUzpuvIohMRbLXT189GZl4G50XCJFlgTUrGyUoFGkYDlS2dmFkQRo5Xw72reJ1uw9t3+lFidqDyk37sJIzQRHXW1SYJMeZo6A7uI5L1TohvsZf5Y2DPLqq/HQqtjCM8tPALaNSNRBQzSgys2WPH7mbGUVl5MgSL4JbuYaJHpFwSOOiRg4nnvm4rKrZQPGE2A0UHXdnLFii8uoEOQKfKjETCrzP2aUp2tv9/hcVDaiT+sdLB2bOAJYdrlqu3spLBJF1KpzsCNwMrwYCEYGJECdxbgioMiVLpN3X0Yk5xFMTbrDxwKz2ia053YSyj5c3roqivE1CU11BK+5gT3rGFDOqzerLoNkj4Qd6KKpffI2ENSwkj3PmWQsPOGFLJXCPYjh+dTvUHRr4ScVPCtQCJ3FBN+GM3HPR4nERi/V4fRpdOxNiJk5GfmQVnT3uSIZzDu1xBYqsWThGGKyMWi1nz54cDalxIB96WLFliLFv20uE2unezShX9ZVlQJv70kcKx9ETSXXF0m00I9GRaul8n8ROEEITw/YEIQc9Oxgl1OLwwbAFpqcR65ky1Y8khJtqJAbW1Ul2xxzAFM0Ekk+oY8bDCbmI+5YfwgzTSQUghHCZ7rXP8XIlLP1R4YpuwXcPWlymxo4Gi/DiOLQ1h/ow0VGyihIeDUME+5JRMwMyjTyLW5EdRSSkJnEBzYx0XQCeR8RgrwVgQUFeFqvUfMtCL4LMGA8eWKfz8NbrCscR82or7qQnkZvvdhsSAlStXMtOhxhamJ0tBnlqdhJnrOkz8fi3zriSSbutBd8dWruxCrggPcRxKUH+YUHCAsHITHFrUWhWMjWgngMuOYdTrCmPPbgWTBVZiE97bS+3A34uZ9j02j5LMubYRYs4pIMm/NG1ZXfJRYqodXEkiDN+58ELMmn8cHnvxCvxiSRR6pA/nz01BxQaKcTCGqUefjMmHH01mNyN7VAn2trZhy0cr0VK5Af1cJYp5Ck9aOsZMm4VDFy3B2jdexsdVIZzP1e6n89Qdipfn5eXxHavyDqANiNEBXMlLent7aclU6rhcDW66MJvrZPrJYykn+OhGGmbCxt7Ubno9OxjGb2M0WQXlqIHDX0upjlJViJchl9GTYR+zi+PQhUkM0rZ0GLhns8I/iWau2WtiabWJG9eY2BWgPaCtsbwU634yft5X/tEYe7kCNJe1LvD5559jyVmnYQdmoLaVsUUshiPyyHz+PP2401A6bTa2fvohsotKsKdqO1Yve5qS/h665x2C6IJ5MN1uhEIRbK54C500ROVHLsRjK0WVGhjLefOeBWYoxEDiwNqQVgCX3WgucW08YZMoBUoKpqRp9J1NQrp/pg6vqCImP8ZAWXoCKa4gXMTjJWMbploNhDSMyqNo85/HzViAoxGiircTITyxfA8ZQb/e4hC/n3vkfMyeMw+/fepBjCGMUEw742EW0kJHhYvCAPZlZ84hK00YoLBxw3rMOWwm2trasabYjuLCBJZ9EoUrt5Su8ShsWPUGckonoam2BrvWVqC1qwH6XT9BzhGHwUWorGn9BuCRP8ITSMWujWswbcEp2B4rJqxSj8mFOtbXJJz9iQTpgCqZ+/62ITGA7meR3LCE3lwPYYQOSqY0lZLOlBP1QHcbanr68LuNCet7B9ebg6KXQsWeR6N4PiHjEvr2QjSCkUgl0UwhOP910YjuZCLEwiDEQ2EbXVKCB+//OWtAY1j+j19hykRW6PKapBpKElwuFlV07GQdf9pByQh2oHbPHuv69XU2TKq149EKE6MO44r4fAMcPj/8GZmoqdyMvTXboN11K0rnz8Ebk48gbO7AVf4M/IXlL/p9j8GRnoc9W9YRGi/Ga5tqMTE/ST46IhYdrJvs558hqSDeK1smnEMPpqefeppSa0mrWEsJ7bMLoRWNocuXT1DHj6jdgwA9muaQwgVHGTiqhJ4NVY3430Eyz+EiUsr+pBRRWBZhilGuE29F2kt/W4pfPPAAIeowPmgG2uktDmYybTzFQ/fUQfeXNpsJIIUbFgYwejT9Vvb6y/Nc+NX1U7B6lx1dWhY9K+Yg2lsIb2cj0NeL1sqN0BedADXvcOzlYO6v3YFH6quxLUAodvpUJKZPoO/vIDTUA6lZ3dbqtFasjIuCOODTyqf9a0NaAVQXMjsaI2IsTPdFB9SFRgYQmkiORIqpUh0kQXpSUlsbYA/3Ymoh1Ut7spiNZKYtYOqvXkMpsSChvp96isEtG/+WTAYBJkTpJt5y443Wt0UpOvrIdEXr7XGwsKqdaOt2Dz6qT0NjkPlh9pFp68MJTNwffaIHS6ZEEGvcidfXhwhrj0Owi/kIFnN5vF50ULeHEmFoZ51CqJzgHMf+x8Zqds6RSfzCojBzWjnURmoZCpaKhdATcxOLElZbLXPwzf6+Do0BlpdIf580klpOi+YccLINvlL+kjqCTKB8k2BplFQXz6umzUilsUyl8ZWJNtbSzeQq2t3CmlCmCifQICutHn1aF5p9NnQHZSXwRuxnIjVcSTEha66Yn1f48fimInTH/eyfxkhFMX3esYgzen3+vdUY7V9PD8xES1eEkktcKSXBTFoT0gpG02010MMbm+PHQi8ZLf6uDMXyfgaGnRx3Ku0aJ6izT8VYgbk6ir6IDs/VkoJofdjPP0NiwOC9BgRF6MLGQSXHNfhz8lW+o/souEp30MRZT9KXzyPEO4GFbc6kHSCMw7JEA94CA5fP0HH/pNE0qC4EG3exGpr+d7Mdz3xgQ09zHA8voR4v1bF8ows/fp6BlY9Bg07LPtA2vfcWr3Wgv7kZReSw0uMsXWdcEibmT7DPpH8v9AsSHQ11tUGbewy9M5KD2JSEeTIVce1FqOS9ouqRb4VhyalQVUqQwkaZsmae/LR/f4fEAA6HM2ctJ22km6tAYADZLGFxwBr1wHt5sYbIP2SAFEQsZGXCVdMZlAWkSjlpgIvGU4fTUmf6ojA1Ds3uY9arn54TY4AUk/ncBE4tt7EsVKceNtBojkE5wbsTx9fgnR2MaGUAkubiPQIBRrok8oIyN46ZWYqOSBtC4RYwxoKDEmyNjJSMRSKISyLen2oNmzI+kCbkj0JpLgcVJ2ra0MyYhpNUdJP56jLoSdHbksYUbETW5YE0WdMH3Lj0aKGATrqDqYSGrQGJyAyu3f+2FDjYSD8UsfUjmcX61VlUH1wJcY5c3MbsQqoC1uCY/QmpQCDt4ohVb0K8eaeV0pTzJIegwjF47IykbZmI6W74/A789srRuGWhC+OpiW0E4uQ+1GUoy2UccWEB1Y8Nq5kbsFKSlFp6LdCYqpPVKE3yyyocZkVEbN931g/8XeodwXy2Vl0Lg7C18JcZZeS4Q5ZHJ+fRFg444NZV+/VnSCvAMLS9LERm/QzzpfQ+5AgSjk66JsnJJcWI3/GjIrilc/g/PEZDF4nNUEGKnaU0CHtrE5gyQ97TAyIDLOGzlrhcaFrCLUDYXibhrWuyksioSWK605245sLRuOjkMHY1hFHPvHDlli6cc1Iuxo9LoXEPYt32Xhy1mIbZQ5iBy0AkLx5l0p9GV5wGsEoCTY30j2lciF2xd55Arrd3QG2vgq2hBba0HMTCPfTcgjh0XByBSFIHMUlDpXhgTcZxwI2LtU4IXN3CgIheS54V/LC7GKVQpGuQB3IHwRr6CS1n65jKfG9drZxGWEFWNX/OpsvOzXXkHSNjfh7QwlYfUkLaTcb+4AUNh90FHH0fsPajbtiZs+VOF2vBiQ7wZXhw2KHZ+PbCXGQwrmhu7EZ8byeeea0RxbkJqjaFaazLjYm0czxhgRrIXIcEIc0t1PMBqJ3VUHvqkJCjqpoMaIde8QFXtxeJUB/v50SovRGncDNJNdFZaVwBpMOBtSExgNVve0ihRBXtn9B7It19q9FPT5JVPiXJaVkzGohCv4ZcYkdO1uk7WfDsoBckxqybSY4WgrpSuymXSH/WpWSP+N2fMZ/c38gEfkShtodZspf7serN3Qjubke8N0T1wVIV5qEjLb1Ys6Iaf6tUeGVnOn765xYktDDOn014ulFhdo5JNUiDSqmPEYwLUyichKZVJYOwAOEcjlH19HK19lnM0d/7CK7Pd8NGhDRChkVMA7PzezC/DKi0QGgtwlqoGpnpgTRO7cAbkzGRcDhyMeeecvnRVJV9koelVAj1JJU30ISW9NUsfD2FZf02loYU2akG+N0AsIwQ88FpZI6fQbRJXa8LWGM1rgp2WZCuMIMRdykhi0+44hoJTa/YFUfNnj70NnSjtbYb27d14JX32/HEVh/O+/GDOPV7d+PV19/CDybspeHWsLtaIZcMX9PALBmTRTqlX5H7zlQ/wvV7uProwk5nzEFPR+/qgfHWP+H8ZCuc/myEGIc4GRQGmhvw41PiGMcVe8dyy2nak5OdfR9xsQPSQkOyAd1s3Gr0eUfALPiMWaZ54wUOJsFkZ4pUNks0PGiQRc8yYPi8IYqt9TqOm8GEBv1OJ6sXwiS+kDtCbKizXZhC15SrRIA1g3le6UIKFFJyNExgbvZxRrWXLYuzXiiO5bu5y2U3bYRGA87zSiZNw/X3/wz9PT247fv/gYy+nUgQ1miWHALFzc3jSu4bu3dzF3pZnCsuqIvlF/5xU9BBaddaGKDxZkZbFwzWM8kcggzK3MyehXsJKpr9rMo2sL6WZoMQrWEzNjc0NNCaHVgbkgqSW9oN4wOh0IpKDdNGAWOySUpL3wswlJRi0iXZHBJxATOKFZ7fbeDql3iGRD1s8jdAIrWxcrqLEfLeBhZNsWJBcgjymxhmVrLDRkM/yojhjiVueiE2zM7ORxnh4gEICXuqt+GHl12IG6/6Lta+/0+U5Qg7uaI4U+lJapCmjTKQw9yDQBrhzmb0EYq2U7ozx8+EY3cD4hs3IdrciFBPKxL9vfBk5iFCByJMbGsCy1PKGcW//ZmMWtSjUSHvDrQNSQXJTan/wvF44tJgVNOvPB7ck6tZe3MtnT+ghoSAQgQrIiacYGcJ4bMfJxAkMc6bTSmnXs/KpjHlie0kfoSwBu0kyw651VS8Ha4CbvKgtFm9oLbGxNyJZESpHbHWQtx/6HE4gxLcSuN/Ym4x44UM7KG+ZjSBa4k51TCfkE7vSmKVOJn2TK2BVVUsc2e1g92TgkhXK6I8X1SMJ68YLlZrO8lUR2qGtYKDbY10mbkvje2S+TqOLweup0PQ0YeI2+26mbWwbdaPB/BnyAwoKSlp7+ruPbu918w+ldHrlAKFpz7guCV4Ee9C1BDJL/+orqBxItsbY/TwFJPaCoexFLxslI4Ei6Si3XFrX53klqQSnSqaRbvEmejWZ5AR4rd7fBoLq+i21iWw+Ah2ndODR9buRbGWh+8fciSza8W4aOwM9FEp5JR14JzxJpYzBphF2HtLD4u33gdW7xR1TayJApI3ZTZcGfno62hFsLmGFXvtlHYaW+aEQ50thMW5KVAyRcwHU27w2++IkAG/fpuRsM1Yd9rixQ9UVlbuW+T7y4MhM4CVwgmH3ZYTiycWOBnFXn6sYmGsjnpmxTShoPcLYyzGTSoWxE2VSmRuFEADY4gQk/ABIqSFrBe1OentUFSdDJclN0A+WgQXAUxhooVJNcLHOm0FPcf6BI6ZquOYoxJYzbz4q7t2YVtLG95oroSjrAW/ODOGVR8GUMfYoYdlhT95j/v96OYfOoYl7PTc4lxmPfT9jQTVJccl7imfR4GEN4WJGEbhLFe3KieCjDcZkR9XbuCG04CfLWOpZR3dV7v915999tma/SX6l88X7TDklpKSMqEvENxIWNqz9R5gVSVw7qMi8vyXX5IsfBJmsGkCAzB4Uk4XtNZGbjmlt0HJPvdwHfcdp+G2VTpWVJn43akaMlkFLYkZ5mcss+LgYsrM1bkhkl0Q1t6xjUaQfY4fzxLHCV70s2SiJWqH1GcVEKlcs7IHV/9dquqALe3clsqCqrU/ZbwVNDDjNhKQnta1i5044xBeQNT25bUKD7xCbCiVN5B6IbHq4lI31Vjq8/VrdUv/T2cfXGFd6en+aRRAWqsDb0NeAXJr6sAOw26bGuhPTEmjf38FV8Hbn+ncs8VVIAS3bMEAr8UaWkWwvJAhsHwr0WxjRxxtCRueXB21vIt1zSJ8ditTJviSoK1SPyqVIr0MgHqpmrpYR7qqQQpzGajVh1kVTT+eR/P2Hjz/Thg/ZupwZ7eJZn4ttJxOBpw0RuH+d4EN9azau8qB/5wfRQZd08K5C3DM3ExU7WzB5h1cpXRNRU1pHS10z8I4htJ/9zkm7lzOHDWT/Xan4+lgIPA8TxpSG6DKkPqwLk5NTT28t69vdb5fs2+8mxPczT1WD9I15My17AJmjsXBJxXEGLAlb0xXU7wcYguquTbpuhJ714jTC/ookIbLmQT6uL/dsgkpNKQzcjXMK2RMwGppxiBY16pjeyeLZhkb9LBkvY36v1uSOdaNeCcyXeO9jx+l4ZxxDOJoo8oYczx3HhO6tBEGsSjNk864ALjuxSgefZNvSkutkhXV0gAHxXTVrQZy00wcSuln3Nfv9XpmccsS1/rQGhfn8DTWh37icDqXNXdFv33337nr5BLuxTrcwPNrCO/Sy7AAHysu+PL9yBxhCtFFLa/YUkdiGxQxd9G9Gg1imMYwTC9psHWSuLXcZ/B35ppTeFoK1ZKdtqOfbmoHfyPP2Oi+MjWmJN0p8QhX2GRCINfOMrFshybFEOihA7B9hyAQTOLTTBnohGeUCys2c7mJfaJNUCL9ZPx3j7ZhbnkCFzysM/OXoBdnf3o4iC8jHXIcIJ1Io4ei3C7XbQzxu/9YYeLD7Tp+eb4UsvIW4hF10HXgZP6vJktBvhfmpLNQVrAIftaoa5RUpwkxyRCby8cYIIXVFVwhcg6h5z5qiibGDgJNtBHWNi0snNcSYDJcKdY1yftpKCdNBcn8hDQlgApJ5T20XcOuDkFegfxiA+/ssWEnDbuWmgKtvdlyFsqYm7j3XBOvr9Ox9GP2reuttHn3Jvsd+t9hsQGDw2CJXqfT5TAjkcQJG2s1XHk8q5fzNSz7lNExcXdLh3iIuw+oIblO4t7BJrwQGEOjzlXtTfzAQMeVahFeJwgmjLBeuVlAZz2pQSnXaTw18a5EzfC9SL4wSxInonoU4QVFyHYqGRAi+LeCuj+NDLh1pgRkrLQ4QkMZ/Xpfhovem42b8gQdpbpj1OuhR7b0ajoDHPLZD3OFUcVxy+r1gd7AqsExD/V1WBkggymbWPZpZ1fnvKbOxJg2Jk5uOI06lrVBUq5IrMHy5VmvyA8kvEg6CT7YhBXWpzYSn66q4fR+SYqTZ1nnCJMGiK5T2oUxBpliMHtmMUSS+AN9S8LfrSKYQxzpM0p7E2GJENXUIYQ1yohLRVjRvZe1/x0NCm/wsThbGKOIzy8jefhCA986wsSljxv4gDt3CD6+fsZpZ9w4FL9/cK6Dr8POgLa2toTP6/2YZdtL1u9WPj+fbnXjYoWWbgOf1pB8fMqJRXNJAgwQfx8P5I0UyLI41iBsYfNSbEnIJFcEqqY9sfD7wb0CnIZwRNoXfEx+HviOaRiM88UwPS2O1TRFDkKroqk2Mf7IZVDnEW1GQ17JB0H9/tOEtdlbLuUjc3DTWSbuflnHIyuYJ9P1OjoaZ/PhTt1f3GDo74adATIkcUvdbvd2BmdnV1QqY2I+V8KpzAGw0m2TPLGKQY1UH1ilzkJ0ITKbtRqIt4j0u+jsK64cmlX5RX6mro4wUGIQR6m2VMxXqS6nSVfymrwk2Se/LPFEsZbBWzYjbgHuGhjYVXChhZSNldzcRvVhAm39yXFce5IN919o4s8rWV75nHX/kMfjPo+I5yb2PKztoDBARsiq4Sqnx90VicRP5pYePnpMww3cc9veZ0tiRaKOJBcrMKfkWtk0sYaSIKd68eSMIv4SGFwkdGdNBl8sHeF/1ioQWENUzb7lY3WR/DNAfKtP/t7HbE2WI4Z66nA3C4hsZIi4lj4GYt8eq+GNahMbiUEJ125ZnCT+0g8Z1T/JfDUdKZfLeSV3gBI6HP520BggQ2Ud5jqHyxULhRPHvboRhAGojk434SVk8T5dwHiEbgwxBjGg1gOZBG/gYSfsafOmIy6/WQQmcklPSgkDxLCKeNO11L/MhEGp/xLxZTWYXGkJQh5u6hkBA2u4GzNEHCpCt5Ub9lHRCGzv4vYmbih88AIDt5xNLIvR+OVPclckfyfYdiM34z06/KT/F/VIPEdzuB03UboUN9qp+85nSPW8pt650bAeX8NhiOgpAnfM6jOzz/dEJJWveJJypOUopz+PR67SXSwCFVjU4H4kh8865DtHavbAOXLel460XGXz8tFmTl5n9ymfw1CsrFY5fFCTuMzkrHUvuV95oa5W3ZJ8XM3dS+zKsB6joyWoRq+T8fOc//3N5fFcQfGle6Gpi+YbqutxQ3U8ZrOeVCWM4Qz3He7cIuXJHZMkaHq+cpKYmoN4svisEjwbLIUjEzRn8uBqUfaULIsZwhAhvO5K5TUD58griXocGTA9Q1fEnqx7cf+y+v5Cm+rhk7vaH9PVeXOId3N8ZE7A5XVd8r+f6l+ZgTfNewLVRo0QexKl7i3rSVW6+uBnNnXCVIHQhDDJg66lsnv9JH6ORVgGVwMMEAIJE+xJAgtxBw9Ku0j8vs/yvZ2PP9NJWEvqB5msqZOmGWrNbfIAP129dp08JDB5f46vyufzLfjK0P99Pvrz/CVM4vxdCM30pbr4KEPtfpCE+KuuVtxsU2ccZlN8Oi4ZMUAsRkWabIMUtTCwAvYRkyrJIvAgAxze5GebK7lKRGVZDJW+GKk7NHXGobp692a5n6aqfmmoC+bZkiqJv3NcL2ZmZhb++1D7f5jJ7XyYEx/scSUTNDSBfEqNj48wO9XgIyWph/lIye0P2NRdS2zq8HEGn/v2JWYMMsUi6pe+l9BVDgtO+9L3PM/l0NWsUl3d9S1D7bxf7I+uqh801DUn2VSaJ8kgel21Lq/3kq9D33+tBoaPKx7V0dVxQyQUu5T+ii+NQdtibmu66Eg+uWoiw35CBjVEOtcwNyyPId5az8cSd8gDXJOl8FJmKGkGcZQkWyW7dDK472AU8yjlhfLIY7BQgPmCfNk+y+dQEPt5erXGp+iaxPNlkWldDqftj2mpab9mAEmw6l/fvlYGDE6Xj5+fHAwG/ysSjZ1LimaTMBibpzEDpeGEKeAGQNaGZlLISWTGaNZehF7mSeRh3QKmyn4CNyFlPgoIaUzaS+JG4rz6Tnl2tIZ/fK5h5ecmC8iE6GysamE26zk+QPYJBle7kl9+PX+/EQwYnHphYWERM0xnMog7m480m0X5JjmZ1SRhi5lMGZ+XjCWKMpjEZ1WDj99bmzmYMpPtTm0scWnoYtl7K3dsEvWU1WKVSiZvEDBs+hoW1i7N9Nte3bs3cMCJ9MHxDsfrN4oBgxMSXcxn8kxk9LkgEosdlYgnZhCXKObvzPJ/tVmqhF8OSLf1szUt1hFqtXabsYH/L4H3aGDfZ86i2ooBvtrF1/j5G8mAr9JDHn9JHV3EYLhUqVgpYYkCVjinUv1zo73hTMQSIaISQbqQfMweGoha1krZ5NixYxu/ziejf3UeI59HKDBCgREKjFBghAIjFBihwAgFRigwQoERCoxQYIQCIxQYocAIBUYoMEKBEQqMUGCEAl8TBf4Psyet2W9C97cAAAAASUVORK5CYII=";
3824
4016
 
3825
4017
  // src/BugBearPanel.tsx
3826
- import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
4018
+ import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
3827
4019
  function BugBearIcon({ size = 24 }) {
3828
4020
  return /* @__PURE__ */ jsx14(
3829
4021
  "img",
@@ -4106,7 +4298,7 @@ function BugBearPanel({
4106
4298
  },
4107
4299
  children: "\u2190 Back"
4108
4300
  }
4109
- ) : /* @__PURE__ */ jsxs13(Fragment3, { children: [
4301
+ ) : /* @__PURE__ */ jsxs13(Fragment4, { children: [
4110
4302
  /* @__PURE__ */ jsx14(BugBearIcon, { size: 28 }),
4111
4303
  /* @__PURE__ */ jsxs13("div", { children: [
4112
4304
  /* @__PURE__ */ jsxs13("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bbearai/react",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "BugBear React components for web apps",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -41,7 +41,7 @@
41
41
  "prepublishOnly": "npm run build"
42
42
  },
43
43
  "dependencies": {
44
- "@bbearai/core": "^0.3.0"
44
+ "@bbearai/core": "^0.4.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "react": "^18.0.0 || ^19.0.0",