@bbearai/react 0.1.8 → 0.1.9

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.mjs CHANGED
@@ -28,7 +28,17 @@ var BugBearContext = createContext({
28
28
  endSession: async () => ({ success: false }),
29
29
  addFinding: async () => ({ success: false }),
30
30
  refreshSession: async () => {
31
- }
31
+ },
32
+ // Messaging
33
+ threads: [],
34
+ unreadCount: 0,
35
+ refreshThreads: async () => {
36
+ },
37
+ getThreadMessages: async () => [],
38
+ sendMessage: async () => false,
39
+ markAsRead: async () => {
40
+ },
41
+ createThread: async () => ({ success: false })
32
42
  });
33
43
  function useBugBear() {
34
44
  return useContext(BugBearContext);
@@ -43,6 +53,8 @@ function BugBearProvider({ config, children, enabled = true }) {
43
53
  const hasInitialized = useRef(false);
44
54
  const [activeSession, setActiveSession] = useState(null);
45
55
  const [sessionFindings, setSessionFindings] = useState([]);
56
+ const [threads, setThreads] = useState([]);
57
+ const [unreadCount, setUnreadCount] = useState(0);
46
58
  const refreshAssignments = useCallback(async () => {
47
59
  if (!client) return;
48
60
  const newAssignments = await client.getAssignedTests();
@@ -87,6 +99,38 @@ function BugBearProvider({ config, children, enabled = true }) {
87
99
  }
88
100
  return result;
89
101
  }, [client, activeSession]);
102
+ const refreshThreads = useCallback(async () => {
103
+ if (!client) return;
104
+ const newThreads = await client.getThreadsForTester();
105
+ setThreads(newThreads);
106
+ const totalUnread = newThreads.reduce((sum, t) => sum + t.unreadCount, 0);
107
+ setUnreadCount(totalUnread);
108
+ }, [client]);
109
+ const getThreadMessages = useCallback(async (threadId) => {
110
+ if (!client) return [];
111
+ return client.getThreadMessages(threadId);
112
+ }, [client]);
113
+ const sendMessage = useCallback(async (threadId, content) => {
114
+ if (!client) return false;
115
+ const success = await client.sendMessage(threadId, content);
116
+ if (success) {
117
+ await refreshThreads();
118
+ }
119
+ return success;
120
+ }, [client, refreshThreads]);
121
+ const markAsRead = useCallback(async (threadId) => {
122
+ if (!client) return;
123
+ await client.markThreadAsRead(threadId);
124
+ await refreshThreads();
125
+ }, [client, refreshThreads]);
126
+ const createThread = useCallback(async (options) => {
127
+ if (!client) return { success: false, error: "Client not initialized" };
128
+ const result = await client.createThread(options);
129
+ if (result.success) {
130
+ await refreshThreads();
131
+ }
132
+ return result;
133
+ }, [client, refreshThreads]);
90
134
  const initializeBugBear = useCallback(async (bugBearClient) => {
91
135
  setIsLoading(true);
92
136
  try {
@@ -99,12 +143,16 @@ function BugBearProvider({ config, children, enabled = true }) {
99
143
  setTesterInfo(info);
100
144
  setIsTester(!!info);
101
145
  if (info && qaEnabled) {
102
- const [newAssignments, session] = await Promise.all([
146
+ const [newAssignments, session, newThreads] = await Promise.all([
103
147
  bugBearClient.getAssignedTests(),
104
- bugBearClient.getActiveSession()
148
+ bugBearClient.getActiveSession(),
149
+ bugBearClient.getThreadsForTester()
105
150
  ]);
106
151
  setAssignments(newAssignments);
107
152
  setActiveSession(session);
153
+ setThreads(newThreads);
154
+ const totalUnread = newThreads.reduce((sum, t) => sum + t.unreadCount, 0);
155
+ setUnreadCount(totalUnread);
108
156
  if (session) {
109
157
  const findings = await bugBearClient.getSessionFindings(session.id);
110
158
  setSessionFindings(findings);
@@ -170,7 +218,15 @@ function BugBearProvider({ config, children, enabled = true }) {
170
218
  startSession,
171
219
  endSession,
172
220
  addFinding,
173
- refreshSession
221
+ refreshSession,
222
+ // Messaging
223
+ threads,
224
+ unreadCount,
225
+ refreshThreads,
226
+ getThreadMessages,
227
+ sendMessage,
228
+ markAsRead,
229
+ createThread
174
230
  },
175
231
  children
176
232
  }
@@ -178,7 +234,7 @@ function BugBearProvider({ config, children, enabled = true }) {
178
234
  }
179
235
 
180
236
  // src/BugBearPanel.tsx
181
- import { useState as useState2, useRef as useRef2, useEffect as useEffect2, useCallback as useCallback2 } from "react";
237
+ import { useState as useState2, useRef as useRef2, useEffect as useEffect2, useCallback as useCallback2, useMemo } from "react";
182
238
  import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
183
239
  function BugBearIcon({ size = 24, className = "" }) {
184
240
  return /* @__PURE__ */ jsxs(
@@ -249,13 +305,77 @@ function BugBearPanel({
249
305
  defaultCollapsed = false,
250
306
  draggable = true
251
307
  }) {
252
- const { client, shouldShowWidget, testerInfo, assignments, currentAssignment, refreshAssignments, isLoading, onNavigate, updateTesterProfile, refreshTesterInfo, activeSession, sessionFindings, startSession, endSession, addFinding } = useBugBear();
308
+ const { client, shouldShowWidget, testerInfo, assignments, currentAssignment, refreshAssignments, isLoading, onNavigate, updateTesterProfile, refreshTesterInfo, activeSession, sessionFindings, startSession, endSession, addFinding, threads, unreadCount, refreshThreads, getThreadMessages, sendMessage, markAsRead, createThread } = useBugBear();
253
309
  const [collapsed, setCollapsed] = useState2(defaultCollapsed);
254
310
  const [activeTab, setActiveTab] = useState2("tests");
255
311
  const [showSteps, setShowSteps] = useState2(false);
256
312
  const [testView, setTestView] = useState2("detail");
257
313
  const [selectedTestId, setSelectedTestId] = useState2(null);
314
+ const [messageView, setMessageView] = useState2("list");
315
+ const [selectedThread, setSelectedThread] = useState2(null);
316
+ const [threadMessages, setThreadMessages] = useState2([]);
317
+ const [replyText, setReplyText] = useState2("");
318
+ const [sendingReply, setSendingReply] = useState2(false);
319
+ const [loadingMessages, setLoadingMessages] = useState2(false);
320
+ const [composeSubject, setComposeSubject] = useState2("");
321
+ const [composeMessage, setComposeMessage] = useState2("");
322
+ const [sendingNewMessage, setSendingNewMessage] = useState2(false);
258
323
  const displayedAssignment = selectedTestId ? assignments.find((a) => a.id === selectedTestId) || currentAssignment : currentAssignment;
324
+ const groupedAssignments = useMemo(() => {
325
+ const groups = /* @__PURE__ */ new Map();
326
+ for (const assignment of assignments) {
327
+ const groupId = assignment.testCase.group?.id || "ungrouped";
328
+ const group = assignment.testCase.group || null;
329
+ if (!groups.has(groupId)) {
330
+ groups.set(groupId, {
331
+ group,
332
+ assignments: [],
333
+ stats: { total: 0, passed: 0, failed: 0, pending: 0, skipped: 0 }
334
+ });
335
+ }
336
+ const folder = groups.get(groupId);
337
+ folder.assignments.push(assignment);
338
+ folder.stats.total++;
339
+ if (assignment.status === "passed") folder.stats.passed++;
340
+ else if (assignment.status === "failed") folder.stats.failed++;
341
+ else if (assignment.status === "skipped") folder.stats.skipped++;
342
+ else folder.stats.pending++;
343
+ }
344
+ const sortedGroups = Array.from(groups.values()).sort((a, b) => {
345
+ if (!a.group && !b.group) return 0;
346
+ if (!a.group) return 1;
347
+ if (!b.group) return -1;
348
+ return a.group.sortOrder - b.group.sortOrder;
349
+ });
350
+ return sortedGroups;
351
+ }, [assignments]);
352
+ const toggleFolderCollapse = useCallback2((groupId) => {
353
+ setCollapsedFolders((prev) => {
354
+ const next = new Set(prev);
355
+ if (next.has(groupId)) {
356
+ next.delete(groupId);
357
+ } else {
358
+ next.add(groupId);
359
+ }
360
+ return next;
361
+ });
362
+ }, []);
363
+ const getStatusBadge = (status) => {
364
+ switch (status) {
365
+ case "passed":
366
+ return { icon: "\u2705", label: "Passed", className: "bg-green-900/30 text-green-400" };
367
+ case "failed":
368
+ return { icon: "\u274C", label: "Failed", className: "bg-red-900/30 text-red-400" };
369
+ case "skipped":
370
+ return { icon: "\u23ED\uFE0F", label: "Skipped", className: "bg-yellow-900/30 text-yellow-400" };
371
+ case "in_progress":
372
+ return { icon: "\u{1F504}", label: "In Progress", className: "bg-blue-900/30 text-blue-400" };
373
+ case "blocked":
374
+ return { icon: "\u{1F6AB}", label: "Blocked", className: "bg-orange-900/30 text-orange-400" };
375
+ default:
376
+ return { icon: "\u23F3", label: "Pending", className: "bg-zinc-700 text-zinc-400" };
377
+ }
378
+ };
259
379
  const [panelPosition, setPanelPosition] = useState2(null);
260
380
  const [isDragging, setIsDragging] = useState2(false);
261
381
  const dragStartRef = useRef2(null);
@@ -277,6 +397,10 @@ function BugBearPanel({
277
397
  expectedResultUnclear: false
278
398
  });
279
399
  const [criteriaResults, setCriteriaResults] = useState2({});
400
+ const [showSkipModal, setShowSkipModal] = useState2(false);
401
+ const [selectedSkipReason, setSelectedSkipReason] = useState2(null);
402
+ const [skipNotes, setSkipNotes] = useState2("");
403
+ const [skipping, setSkipping] = useState2(false);
280
404
  const [profileEditing, setProfileEditing] = useState2(false);
281
405
  const [profileName, setProfileName] = useState2("");
282
406
  const [profileAdditionalEmails, setProfileAdditionalEmails] = useState2([]);
@@ -285,6 +409,7 @@ function BugBearPanel({
285
409
  const [savingProfile, setSavingProfile] = useState2(false);
286
410
  const [profileSaved, setProfileSaved] = useState2(false);
287
411
  const [showProfileOverlay, setShowProfileOverlay] = useState2(false);
412
+ const [collapsedFolders, setCollapsedFolders] = useState2(/* @__PURE__ */ new Set());
288
413
  const [startingSession, setStartingSession] = useState2(false);
289
414
  const [sessionFocusArea, setSessionFocusArea] = useState2("");
290
415
  const [sessionPlatform, setSessionPlatform] = useState2("web");
@@ -488,6 +613,35 @@ function BugBearPanel({
488
613
  expectedResultUnclear: false
489
614
  });
490
615
  };
616
+ const handleOpenSkipModal = () => {
617
+ setShowSkipModal(true);
618
+ setSelectedSkipReason(null);
619
+ setSkipNotes("");
620
+ };
621
+ const handleSkip = async () => {
622
+ if (!client || !displayedAssignment || !selectedSkipReason) return;
623
+ setSkipping(true);
624
+ const result = await client.skipAssignment(
625
+ displayedAssignment.id,
626
+ selectedSkipReason,
627
+ skipNotes.trim() || void 0
628
+ );
629
+ if (result.success) {
630
+ await refreshAssignments();
631
+ setShowSkipModal(false);
632
+ setSelectedSkipReason(null);
633
+ setSkipNotes("");
634
+ setSelectedTestId(null);
635
+ setTestView("detail");
636
+ }
637
+ setSkipping(false);
638
+ };
639
+ const skipReasonOptions = [
640
+ { value: "blocked", label: "Blocked", description: "Environment issue or external blocker" },
641
+ { value: "not_ready", label: "Not Ready", description: "Feature not yet implemented" },
642
+ { value: "dependency", label: "Dependency", description: "Waiting on another test or task" },
643
+ { value: "other", label: "Other", description: "Other reason (please specify)" }
644
+ ];
491
645
  const handleSubmitFeedback = async (skipFeedback = false) => {
492
646
  if (!client || !displayedAssignment) return;
493
647
  setSubmitting(true);
@@ -683,6 +837,87 @@ function BugBearPanel({
683
837
  }
684
838
  return `${m}:${s.toString().padStart(2, "0")}`;
685
839
  };
840
+ const formatRelativeTime = (dateString) => {
841
+ const date = new Date(dateString);
842
+ const now = /* @__PURE__ */ new Date();
843
+ const diffMs = now.getTime() - date.getTime();
844
+ const diffMins = Math.floor(diffMs / 6e4);
845
+ const diffHours = Math.floor(diffMs / 36e5);
846
+ const diffDays = Math.floor(diffMs / 864e5);
847
+ if (diffMins < 1) return "Just now";
848
+ if (diffMins < 60) return `${diffMins}m ago`;
849
+ if (diffHours < 24) return `${diffHours}h ago`;
850
+ if (diffDays === 1) return "Yesterday";
851
+ if (diffDays < 7) return `${diffDays}d ago`;
852
+ return date.toLocaleDateString();
853
+ };
854
+ const formatMessageTime = (dateString) => {
855
+ const date = new Date(dateString);
856
+ return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
857
+ };
858
+ const getThreadTypeIcon = (type) => {
859
+ switch (type) {
860
+ case "announcement":
861
+ return "\u{1F4E2}";
862
+ case "direct":
863
+ return "\u{1F4AC}";
864
+ case "report":
865
+ return "\u{1F41B}";
866
+ case "general_note":
867
+ return "\u{1F4DD}";
868
+ default:
869
+ return "\u{1F4AC}";
870
+ }
871
+ };
872
+ const handleOpenThread = async (thread) => {
873
+ setSelectedThread(thread);
874
+ setMessageView("thread");
875
+ setLoadingMessages(true);
876
+ const messages = await getThreadMessages(thread.id);
877
+ setThreadMessages(messages);
878
+ setLoadingMessages(false);
879
+ if (thread.unreadCount > 0) {
880
+ await markAsRead(thread.id);
881
+ }
882
+ };
883
+ const handleSendReply = async () => {
884
+ if (!selectedThread || !replyText.trim()) return;
885
+ setSendingReply(true);
886
+ const success = await sendMessage(selectedThread.id, replyText.trim());
887
+ if (success) {
888
+ setReplyText("");
889
+ const messages = await getThreadMessages(selectedThread.id);
890
+ setThreadMessages(messages);
891
+ }
892
+ setSendingReply(false);
893
+ };
894
+ const handleBackToThreadList = () => {
895
+ setMessageView("list");
896
+ setSelectedThread(null);
897
+ setThreadMessages([]);
898
+ setReplyText("");
899
+ setComposeSubject("");
900
+ setComposeMessage("");
901
+ };
902
+ const handleStartNewMessage = () => {
903
+ setMessageView("compose");
904
+ setComposeSubject("");
905
+ setComposeMessage("");
906
+ };
907
+ const handleSendNewMessage = async () => {
908
+ if (!composeSubject.trim() || !composeMessage.trim()) return;
909
+ setSendingNewMessage(true);
910
+ const result = await createThread({
911
+ subject: composeSubject.trim(),
912
+ message: composeMessage.trim()
913
+ });
914
+ if (result.success) {
915
+ setComposeSubject("");
916
+ setComposeMessage("");
917
+ setMessageView("list");
918
+ }
919
+ setSendingNewMessage(false);
920
+ };
686
921
  return /* @__PURE__ */ jsxs(
687
922
  "div",
688
923
  {
@@ -705,22 +940,22 @@ function BugBearPanel({
705
940
  onClick: () => setCollapsed(false),
706
941
  "data-drag-handle": true,
707
942
  onDoubleClick: handleDoubleClick,
708
- className: "flex items-center gap-2 px-3 py-2 bg-purple-600 text-white rounded-full shadow-lg hover:bg-purple-700 transition-colors",
943
+ className: "flex items-center gap-2 px-3 py-2 bg-blue-500 text-white rounded-full shadow-lg hover:bg-blue-600 transition-colors",
709
944
  style: { cursor: draggable ? "grab" : "pointer" },
710
945
  children: [
711
946
  /* @__PURE__ */ jsx2(BugBearIcon, { size: 24 }),
712
947
  /* @__PURE__ */ jsx2("span", { className: "font-medium", children: "BugBear" }),
713
- pendingCount > 0 && /* @__PURE__ */ jsx2("span", { className: "bg-white text-purple-600 text-xs font-bold px-1.5 py-0.5 rounded-full", children: pendingCount })
948
+ pendingCount > 0 && /* @__PURE__ */ jsx2("span", { className: "bg-white text-blue-400 text-xs font-bold px-1.5 py-0.5 rounded-full", children: pendingCount })
714
949
  ]
715
950
  }
716
951
  ),
717
- !collapsed && /* @__PURE__ */ jsxs("div", { className: "w-80 bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden", children: [
952
+ !collapsed && /* @__PURE__ */ jsxs("div", { className: "w-80 bg-zinc-900 rounded-xl shadow-2xl border border-zinc-800 overflow-hidden", children: [
718
953
  /* @__PURE__ */ jsxs(
719
954
  "div",
720
955
  {
721
956
  "data-drag-handle": true,
722
957
  onDoubleClick: handleDoubleClick,
723
- className: "bg-purple-600 text-white px-4 py-3 flex items-center justify-between",
958
+ className: "bg-zinc-950 text-white px-4 py-3 flex items-center justify-between border-b border-zinc-800",
724
959
  style: { cursor: draggable ? isDragging ? "grabbing" : "grab" : "default" },
725
960
  children: [
726
961
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
@@ -728,13 +963,13 @@ function BugBearPanel({
728
963
  /* @__PURE__ */ jsxs("div", { children: [
729
964
  /* @__PURE__ */ jsxs("h3", { className: "font-semibold text-sm flex items-center gap-2", children: [
730
965
  "BugBear",
731
- draggable && /* @__PURE__ */ jsx2("span", { className: "text-purple-300 text-xs", title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
966
+ draggable && /* @__PURE__ */ jsx2("span", { className: "text-zinc-500 text-xs", title: "Drag to move, double-click to reset", children: "\u22EE\u22EE" })
732
967
  ] }),
733
968
  /* @__PURE__ */ jsxs(
734
969
  "button",
735
970
  {
736
971
  onClick: handleOpenProfile,
737
- className: "text-purple-200 text-xs flex items-center gap-1 hover:text-white transition-colors",
972
+ className: "text-zinc-400 text-xs flex items-center gap-1 hover:text-white transition-colors",
738
973
  children: [
739
974
  testerInfo?.name,
740
975
  /* @__PURE__ */ jsx2("span", { className: "text-[10px]", children: "\u270E" })
@@ -747,23 +982,33 @@ function BugBearPanel({
747
982
  "button",
748
983
  {
749
984
  onClick: () => setCollapsed(true),
750
- className: "p-1 hover:bg-purple-500 rounded",
985
+ className: "p-1 hover:bg-zinc-800 rounded",
751
986
  children: /* @__PURE__ */ jsx2("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })
752
987
  }
753
988
  )
754
989
  ]
755
990
  }
756
991
  ),
757
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2 p-2 bg-gray-50 border-b border-gray-200", children: [
992
+ /* @__PURE__ */ jsxs("div", { className: "flex border-b border-zinc-800 bg-zinc-900", children: [
758
993
  /* @__PURE__ */ jsxs(
759
994
  "button",
760
995
  {
761
996
  onClick: () => setActiveTab("tests"),
762
- className: `flex-1 py-2 px-3 rounded-lg text-sm font-semibold transition-all flex items-center justify-center gap-1.5 ${activeTab === "tests" ? "bg-purple-600 text-white shadow-sm" : "bg-white text-gray-600 hover:bg-gray-100 border border-gray-200"}`,
997
+ className: `flex-1 py-3 text-sm font-medium transition-all flex items-center justify-center gap-1.5 border-b-2 ${activeTab === "tests" ? "border-blue-500 text-blue-400" : "border-transparent text-zinc-500 hover:text-zinc-300"}`,
763
998
  children: [
764
- /* @__PURE__ */ jsx2("span", { children: "\u{1F4CB}" }),
765
- /* @__PURE__ */ jsx2("span", { children: "Run Tests" }),
766
- pendingCount > 0 && /* @__PURE__ */ jsx2("span", { className: `ml-1 px-1.5 py-0.5 rounded-full text-xs ${activeTab === "tests" ? "bg-purple-500 text-white" : "bg-purple-100 text-purple-600"}`, children: pendingCount })
999
+ "Tests ",
1000
+ pendingCount > 0 && `(${pendingCount})`
1001
+ ]
1002
+ }
1003
+ ),
1004
+ /* @__PURE__ */ jsxs(
1005
+ "button",
1006
+ {
1007
+ onClick: () => setActiveTab("messages"),
1008
+ className: `flex-1 py-3 text-sm font-medium transition-all flex items-center justify-center gap-1.5 relative border-b-2 ${activeTab === "messages" ? "border-blue-500 text-blue-400" : "border-transparent text-zinc-500 hover:text-zinc-300"}`,
1009
+ children: [
1010
+ "Messages",
1011
+ unreadCount > 0 && /* @__PURE__ */ jsx2("span", { className: "absolute top-1.5 ml-16 min-w-[18px] h-[18px] px-1 bg-blue-500 rounded-full text-[10px] text-white font-bold flex items-center justify-center", children: unreadCount })
767
1012
  ]
768
1013
  }
769
1014
  ),
@@ -771,100 +1016,165 @@ function BugBearPanel({
771
1016
  "button",
772
1017
  {
773
1018
  onClick: () => setActiveTab("session"),
774
- className: `flex-1 py-2 px-3 rounded-lg text-sm font-semibold transition-all flex items-center justify-center gap-1.5 relative ${activeTab === "session" ? "bg-amber-500 text-white shadow-sm" : "bg-white text-gray-600 hover:bg-gray-100 border border-gray-200"}`,
1019
+ className: `flex-1 py-3 text-sm font-medium transition-all flex items-center justify-center gap-1.5 relative border-b-2 ${activeTab === "session" ? "border-blue-500 text-blue-400" : "border-transparent text-zinc-500 hover:text-zinc-300"}`,
775
1020
  children: [
776
- /* @__PURE__ */ jsx2("span", { children: "\u{1F50D}" }),
777
- /* @__PURE__ */ jsx2("span", { children: "Explore" }),
778
- activeSession && /* @__PURE__ */ jsx2("span", { className: "absolute -top-1 -right-1 w-3 h-3 bg-green-500 rounded-full border-2 border-white animate-pulse" })
1021
+ "Explore",
1022
+ activeSession && /* @__PURE__ */ jsx2("span", { className: "absolute top-2 ml-14 w-2 h-2 bg-green-500 rounded-full animate-pulse" })
779
1023
  ]
780
1024
  }
1025
+ ),
1026
+ /* @__PURE__ */ jsx2(
1027
+ "button",
1028
+ {
1029
+ onClick: () => setActiveTab("report"),
1030
+ className: `flex-1 py-3 text-sm font-medium transition-all flex items-center justify-center gap-1.5 border-b-2 ${activeTab === "report" ? "border-blue-500 text-blue-400" : "border-transparent text-zinc-500 hover:text-zinc-300"}`,
1031
+ children: "Report"
1032
+ }
781
1033
  )
782
1034
  ] }),
783
- /* @__PURE__ */ jsx2("div", { className: "flex justify-center py-1.5 border-b border-gray-200 bg-white", children: /* @__PURE__ */ jsx2(
784
- "button",
785
- {
786
- onClick: () => setActiveTab("report"),
787
- className: `px-4 py-1 text-xs font-medium transition-colors rounded-full ${activeTab === "report" ? "bg-red-50 text-red-600 border border-red-200" : "text-gray-500 hover:text-gray-700 hover:bg-gray-50"}`,
788
- children: "\u{1F41B} Report Bug / Feedback"
789
- }
790
- ) }),
791
1035
  /* @__PURE__ */ jsxs("div", { className: "p-4 max-h-96 overflow-y-auto", children: [
792
1036
  activeTab === "tests" && /* @__PURE__ */ jsx2("div", { children: assignments.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [
793
1037
  /* @__PURE__ */ jsx2("span", { className: "text-4xl", children: "\u2705" }),
794
- /* @__PURE__ */ jsx2("p", { className: "text-gray-600 mt-2 font-medium", children: "All caught up!" }),
795
- /* @__PURE__ */ jsx2("p", { className: "text-gray-400 text-sm", children: "No tests assigned" })
1038
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-400 mt-2 font-medium", children: "All caught up!" }),
1039
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-sm", children: "No tests assigned" })
796
1040
  ] }) : testView === "list" ? (
797
- /* List View - Show all tests */
798
- /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
799
- /* @__PURE__ */ jsx2("div", { className: "flex items-center justify-between mb-2", children: /* @__PURE__ */ jsxs("span", { className: "text-xs font-medium text-gray-500", children: [
800
- assignments.length,
801
- " test",
802
- assignments.length !== 1 ? "s" : "",
803
- " assigned"
804
- ] }) }),
805
- assignments.map((assignment) => /* @__PURE__ */ jsxs(
806
- "button",
807
- {
808
- onClick: () => {
809
- setSelectedTestId(assignment.id);
810
- setTestView("detail");
811
- setShowSteps(false);
812
- },
813
- className: `w-full text-left p-3 rounded-lg border transition-colors ${assignment.id === currentAssignment?.id ? "bg-purple-50 border-purple-200" : "bg-gray-50 border-gray-200 hover:bg-gray-100"}`,
814
- children: [
815
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between mb-1", children: [
816
- /* @__PURE__ */ jsx2("span", { className: "text-xs font-mono text-gray-500", children: assignment.testCase.testKey }),
817
- /* @__PURE__ */ jsx2("span", { className: `text-xs px-1.5 py-0.5 rounded font-medium ${assignment.testCase.priority === "P0" ? "bg-red-100 text-red-700" : assignment.testCase.priority === "P1" ? "bg-orange-100 text-orange-700" : "bg-gray-100 text-gray-600"}`, children: assignment.testCase.priority })
818
- ] }),
819
- /* @__PURE__ */ jsx2("h4", { className: "font-medium text-gray-900 text-sm line-clamp-2", children: assignment.testCase.title }),
820
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-1 text-xs text-gray-400", children: [
821
- assignment.testCase.track && /* @__PURE__ */ jsx2(
822
- "span",
823
- {
824
- className: "px-1 py-0.5 rounded text-white",
825
- style: { backgroundColor: assignment.testCase.track.color },
826
- children: templateInfo[assignment.testCase.track.testTemplate || "steps"].icon
827
- }
828
- ),
829
- /* @__PURE__ */ jsxs("span", { children: [
830
- assignment.testCase.steps.length,
831
- " ",
832
- assignment.testCase.track?.testTemplate === "checklist" ? "items" : assignment.testCase.track?.testTemplate === "rubric" ? "criteria" : "steps"
833
- ] }),
834
- assignment.id === currentAssignment?.id && /* @__PURE__ */ jsx2("span", { className: "text-purple-600 font-medium", children: "\u2022 Current" })
835
- ] })
836
- ]
837
- },
838
- assignment.id
839
- ))
1041
+ /* List View - Show tests grouped by folder */
1042
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
1043
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2 px-1", children: [
1044
+ /* @__PURE__ */ jsxs("span", { className: "text-xs font-medium text-zinc-500", children: [
1045
+ assignments.length,
1046
+ " test",
1047
+ assignments.length !== 1 ? "s" : "",
1048
+ " assigned"
1049
+ ] }),
1050
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs", children: [
1051
+ /* @__PURE__ */ jsxs("span", { className: "text-green-400", children: [
1052
+ "\u2705 ",
1053
+ assignments.filter((a) => a.status === "passed").length
1054
+ ] }),
1055
+ /* @__PURE__ */ jsxs("span", { className: "text-red-400", children: [
1056
+ "\u274C ",
1057
+ assignments.filter((a) => a.status === "failed").length
1058
+ ] }),
1059
+ /* @__PURE__ */ jsxs("span", { className: "text-zinc-500", children: [
1060
+ "\u23F3 ",
1061
+ assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length
1062
+ ] })
1063
+ ] })
1064
+ ] }),
1065
+ groupedAssignments.map((folder) => {
1066
+ const groupId = folder.group?.id || "ungrouped";
1067
+ const isCollapsed = collapsedFolders.has(groupId);
1068
+ const completedCount = folder.stats.passed + folder.stats.failed + folder.stats.skipped;
1069
+ return /* @__PURE__ */ jsxs("div", { className: "border border-zinc-700 rounded-lg overflow-hidden", children: [
1070
+ /* @__PURE__ */ jsxs(
1071
+ "button",
1072
+ {
1073
+ onClick: () => toggleFolderCollapse(groupId),
1074
+ className: "w-full flex items-center justify-between p-2.5 bg-zinc-800 hover:bg-zinc-700 transition-colors",
1075
+ children: [
1076
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1077
+ /* @__PURE__ */ jsx2("span", { className: "text-sm", children: isCollapsed ? "\u{1F4C1}" : "\u{1F4C2}" }),
1078
+ /* @__PURE__ */ jsx2("span", { className: "font-medium text-sm text-zinc-100", children: folder.group?.name || "Other Tests" }),
1079
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-zinc-500", children: [
1080
+ "(",
1081
+ completedCount,
1082
+ "/",
1083
+ folder.stats.total,
1084
+ ")"
1085
+ ] })
1086
+ ] }),
1087
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1088
+ /* @__PURE__ */ jsx2("div", { className: "w-16 h-1.5 bg-zinc-700 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx2(
1089
+ "div",
1090
+ {
1091
+ className: "h-full bg-green-500 transition-all",
1092
+ style: { width: `${completedCount / folder.stats.total * 100}%` }
1093
+ }
1094
+ ) }),
1095
+ /* @__PURE__ */ jsx2("span", { className: "text-zinc-500 text-xs", children: isCollapsed ? "\u25B6" : "\u25BC" })
1096
+ ] })
1097
+ ]
1098
+ }
1099
+ ),
1100
+ !isCollapsed && /* @__PURE__ */ jsx2("div", { className: "divide-y divide-zinc-800", children: folder.assignments.map((assignment) => {
1101
+ const statusBadge = getStatusBadge(assignment.status);
1102
+ return /* @__PURE__ */ jsxs(
1103
+ "button",
1104
+ {
1105
+ onClick: () => {
1106
+ setSelectedTestId(assignment.id);
1107
+ setTestView("detail");
1108
+ setShowSteps(false);
1109
+ },
1110
+ className: `w-full text-left p-3 transition-colors ${assignment.id === currentAssignment?.id ? "bg-blue-950/30" : "bg-zinc-900 hover:bg-zinc-800"}`,
1111
+ children: [
1112
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between mb-1", children: [
1113
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1114
+ /* @__PURE__ */ jsx2("span", { className: "text-xs font-mono text-zinc-500", children: assignment.testCase.testKey }),
1115
+ assignment.isVerification && /* @__PURE__ */ jsx2("span", { className: "text-xs px-1.5 py-0.5 rounded bg-green-900/30 text-green-400 font-medium", children: "\u{1F527} Verify" })
1116
+ ] }),
1117
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
1118
+ /* @__PURE__ */ jsxs("span", { className: `text-xs px-1.5 py-0.5 rounded font-medium ${statusBadge.className}`, children: [
1119
+ statusBadge.icon,
1120
+ " ",
1121
+ statusBadge.label
1122
+ ] }),
1123
+ /* @__PURE__ */ jsx2("span", { className: `text-xs px-1.5 py-0.5 rounded font-medium ${assignment.testCase.priority === "P0" ? "bg-red-900/30 text-red-400" : assignment.testCase.priority === "P1" ? "bg-orange-900/30 text-orange-400" : "bg-zinc-700 text-zinc-400"}`, children: assignment.testCase.priority })
1124
+ ] })
1125
+ ] }),
1126
+ /* @__PURE__ */ jsx2("h4", { className: "font-medium text-zinc-100 text-sm line-clamp-2", children: assignment.testCase.title }),
1127
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mt-1 text-xs text-zinc-500", children: [
1128
+ assignment.testCase.track && /* @__PURE__ */ jsx2(
1129
+ "span",
1130
+ {
1131
+ className: "px-1 py-0.5 rounded text-white",
1132
+ style: { backgroundColor: assignment.testCase.track.color },
1133
+ children: templateInfo[assignment.testCase.track.testTemplate || "steps"].icon
1134
+ }
1135
+ ),
1136
+ /* @__PURE__ */ jsxs("span", { children: [
1137
+ assignment.testCase.steps.length,
1138
+ " ",
1139
+ assignment.testCase.track?.testTemplate === "checklist" ? "items" : assignment.testCase.track?.testTemplate === "rubric" ? "criteria" : "steps"
1140
+ ] }),
1141
+ assignment.id === currentAssignment?.id && /* @__PURE__ */ jsx2("span", { className: "text-blue-400 font-medium", children: "\u2022 Current" })
1142
+ ] })
1143
+ ]
1144
+ },
1145
+ assignment.id
1146
+ );
1147
+ }) })
1148
+ ] }, groupId);
1149
+ })
840
1150
  ] })
841
1151
  ) : showFeedbackPrompt && displayedAssignment ? (
842
1152
  /* Feedback prompt after completing a test */
843
1153
  /* @__PURE__ */ jsxs("div", { className: "p-3", children: [
844
1154
  /* @__PURE__ */ jsxs("div", { className: "text-center mb-4", children: [
845
1155
  /* @__PURE__ */ jsx2("span", { className: "text-3xl", children: pendingFeedbackStatus === "passed" ? "\u2713" : "\u2717" }),
846
- /* @__PURE__ */ jsx2("p", { className: `font-semibold mt-1 ${pendingFeedbackStatus === "passed" ? "text-green-600" : "text-red-600"}`, children: pendingFeedbackStatus === "passed" ? "Test Passed!" : "Test Failed" })
1156
+ /* @__PURE__ */ jsx2("p", { className: `font-semibold mt-1 ${pendingFeedbackStatus === "passed" ? "text-green-400" : "text-red-400"}`, children: pendingFeedbackStatus === "passed" ? "Test Passed!" : "Test Failed" })
847
1157
  ] }),
848
- /* @__PURE__ */ jsxs("div", { className: "bg-purple-50 border border-purple-100 rounded-lg p-3 mb-4", children: [
849
- /* @__PURE__ */ jsx2("p", { className: "text-purple-800 text-sm font-medium mb-1", children: "Help us improve this test" }),
850
- /* @__PURE__ */ jsx2("p", { className: "text-purple-600 text-xs", children: "Your feedback shapes better tests for everyone." })
1158
+ /* @__PURE__ */ jsxs("div", { className: "bg-blue-950/30 border border-blue-900 rounded-lg p-3 mb-4", children: [
1159
+ /* @__PURE__ */ jsx2("p", { className: "text-blue-300 text-sm font-medium mb-1", children: "Help us improve this test" }),
1160
+ /* @__PURE__ */ jsx2("p", { className: "text-blue-400 text-xs", children: "Your feedback shapes better tests for everyone." })
851
1161
  ] }),
852
1162
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
853
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-600 mb-2", children: "How was this test?" }),
1163
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-400 mb-2", children: "How was this test?" }),
854
1164
  /* @__PURE__ */ jsx2("div", { className: "flex items-center gap-1 justify-center", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx2(
855
1165
  "button",
856
1166
  {
857
1167
  type: "button",
858
1168
  onClick: () => setFeedbackRating(star),
859
- className: `text-2xl transition-colors ${star <= feedbackRating ? "text-yellow-400" : "text-gray-300"} hover:text-yellow-400`,
1169
+ className: `text-2xl transition-colors ${star <= feedbackRating ? "text-yellow-400" : "text-zinc-600"} hover:text-yellow-400`,
860
1170
  children: "\u2605"
861
1171
  },
862
1172
  star
863
1173
  )) }),
864
- /* @__PURE__ */ jsx2("p", { className: "text-center text-xs text-gray-500 mt-1", children: feedbackRating === 1 ? "Needs work" : feedbackRating === 2 ? "Could be better" : feedbackRating === 3 ? "Okay" : feedbackRating === 4 ? "Good" : "Great!" })
1174
+ /* @__PURE__ */ jsx2("p", { className: "text-center text-xs text-zinc-500 mt-1", children: feedbackRating === 1 ? "Needs work" : feedbackRating === 2 ? "Could be better" : feedbackRating === 3 ? "Okay" : feedbackRating === 4 ? "Good" : "Great!" })
865
1175
  ] }),
866
1176
  feedbackRating < 4 && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
867
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-600 mb-2", children: "What could be improved?" }),
1177
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-400 mb-2", children: "What could be improved?" }),
868
1178
  /* @__PURE__ */ jsx2("div", { className: "grid grid-cols-2 gap-2", children: [
869
1179
  { key: "stepsUnclear", label: "Steps unclear" },
870
1180
  { key: "expectedResultUnclear", label: "Expected result unclear" },
@@ -875,21 +1185,21 @@ function BugBearPanel({
875
1185
  {
876
1186
  type: "button",
877
1187
  onClick: () => setFeedbackFlags((prev) => ({ ...prev, [key]: !prev[key] })),
878
- className: `px-2 py-1.5 rounded text-xs font-medium border transition-colors ${feedbackFlags[key] ? "bg-purple-100 border-purple-300 text-purple-700" : "bg-white border-gray-200 text-gray-600 hover:border-purple-200"}`,
1188
+ className: `px-2 py-1.5 rounded text-xs font-medium border transition-colors ${feedbackFlags[key] ? "bg-blue-900/50 border-blue-700 text-blue-300" : "bg-zinc-800 border-zinc-700 text-zinc-400 hover:border-blue-800"}`,
879
1189
  children: label
880
1190
  },
881
1191
  key
882
1192
  )) })
883
1193
  ] }),
884
1194
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
885
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-600 mb-1", children: "Suggestions? (optional)" }),
1195
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-400 mb-1", children: "Suggestions? (optional)" }),
886
1196
  /* @__PURE__ */ jsx2(
887
1197
  "textarea",
888
1198
  {
889
1199
  value: feedbackNote,
890
1200
  onChange: (e) => setFeedbackNote(e.target.value),
891
1201
  placeholder: "How could this test be improved?",
892
- className: "w-full px-3 py-2 text-sm border border-gray-200 rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-purple-500 focus:border-transparent",
1202
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-700 rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent placeholder:text-zinc-500",
893
1203
  rows: 2
894
1204
  }
895
1205
  )
@@ -900,7 +1210,7 @@ function BugBearPanel({
900
1210
  {
901
1211
  onClick: handleSkipFeedback,
902
1212
  disabled: submitting,
903
- className: "flex-1 px-3 py-2 text-sm font-medium text-gray-600 bg-gray-100 rounded-lg hover:bg-gray-200 transition-colors disabled:opacity-50",
1213
+ className: "flex-1 px-3 py-2 text-sm font-medium text-zinc-400 bg-zinc-700 rounded-lg hover:bg-zinc-700 transition-colors disabled:opacity-50",
904
1214
  children: "Skip"
905
1215
  }
906
1216
  ),
@@ -909,7 +1219,7 @@ function BugBearPanel({
909
1219
  {
910
1220
  onClick: () => handleSubmitFeedback(false),
911
1221
  disabled: submitting,
912
- className: "flex-1 px-3 py-2 text-sm font-medium text-white bg-purple-600 rounded-lg hover:bg-purple-700 transition-colors disabled:opacity-50",
1222
+ className: "flex-1 px-3 py-2 text-sm font-medium text-white bg-blue-500 rounded-lg hover:bg-blue-600 transition-colors disabled:opacity-50",
913
1223
  children: submitting ? "Submitting..." : "Submit Feedback"
914
1224
  }
915
1225
  )
@@ -919,8 +1229,8 @@ function BugBearPanel({
919
1229
  /* Success state after passing */
920
1230
  /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [
921
1231
  /* @__PURE__ */ jsx2("span", { className: "text-5xl", children: "\u2713" }),
922
- /* @__PURE__ */ jsx2("p", { className: "text-green-600 mt-3 font-semibold text-lg", children: "Passed!" }),
923
- /* @__PURE__ */ jsx2("p", { className: "text-gray-400 text-sm mt-1", children: "Loading next test..." })
1232
+ /* @__PURE__ */ jsx2("p", { className: "text-green-400 mt-3 font-semibold text-lg", children: "Passed!" }),
1233
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-sm mt-1", children: "Loading next test..." })
924
1234
  ] })
925
1235
  ) : displayedAssignment ? (
926
1236
  /* Detail View - Show single test */
@@ -932,7 +1242,7 @@ function BugBearPanel({
932
1242
  setTestView("list");
933
1243
  setSelectedTestId(null);
934
1244
  },
935
- className: "flex items-center gap-1 text-xs text-purple-600 font-medium hover:text-purple-700 mb-3",
1245
+ className: "flex items-center gap-1 text-xs text-blue-400 font-medium hover:text-blue-300 mb-2",
936
1246
  children: [
937
1247
  "\u2190 All Tests (",
938
1248
  assignments.length,
@@ -940,9 +1250,53 @@ function BugBearPanel({
940
1250
  ]
941
1251
  }
942
1252
  ),
943
- /* @__PURE__ */ jsxs("div", { className: "bg-gray-50 rounded-lg p-3 mb-3", children: [
1253
+ (() => {
1254
+ const currentGroup = displayedAssignment.testCase.group;
1255
+ const groupAssignments = currentGroup ? assignments.filter((a) => a.testCase.group?.id === currentGroup.id) : assignments;
1256
+ const completed = groupAssignments.filter(
1257
+ (a) => a.status === "passed" || a.status === "failed" || a.status === "skipped"
1258
+ ).length;
1259
+ const total = groupAssignments.length;
1260
+ const progressPercent = total > 0 ? completed / total * 100 : 0;
1261
+ return /* @__PURE__ */ jsxs("div", { className: "mb-3 p-2 bg-blue-950/30 rounded-lg", children: [
1262
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-1.5", children: [
1263
+ /* @__PURE__ */ jsx2("span", { className: "text-xs font-medium text-blue-300", children: currentGroup ? `\u{1F4C1} ${currentGroup.name}` : "\u{1F4CB} All Tests" }),
1264
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-blue-400", children: [
1265
+ completed,
1266
+ "/",
1267
+ total,
1268
+ " complete"
1269
+ ] })
1270
+ ] }),
1271
+ /* @__PURE__ */ jsx2("div", { className: "w-full h-2 bg-zinc-700 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx2(
1272
+ "div",
1273
+ {
1274
+ className: "h-full bg-blue-500 transition-all duration-300",
1275
+ style: { width: `${progressPercent}%` }
1276
+ }
1277
+ ) }),
1278
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between mt-1 text-[10px] text-blue-400", children: [
1279
+ /* @__PURE__ */ jsxs("span", { children: [
1280
+ "\u2705 ",
1281
+ groupAssignments.filter((a) => a.status === "passed").length,
1282
+ " passed"
1283
+ ] }),
1284
+ /* @__PURE__ */ jsxs("span", { children: [
1285
+ "\u274C ",
1286
+ groupAssignments.filter((a) => a.status === "failed").length,
1287
+ " failed"
1288
+ ] }),
1289
+ /* @__PURE__ */ jsxs("span", { children: [
1290
+ "\u23ED\uFE0F ",
1291
+ groupAssignments.filter((a) => a.status === "skipped").length,
1292
+ " skipped"
1293
+ ] })
1294
+ ] })
1295
+ ] });
1296
+ })(),
1297
+ /* @__PURE__ */ jsxs("div", { className: "bg-zinc-800 rounded-lg p-3 mb-3", children: [
944
1298
  /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between mb-2", children: [
945
- /* @__PURE__ */ jsx2("span", { className: "text-xs font-mono text-gray-500", children: displayedAssignment.testCase.testKey }),
1299
+ /* @__PURE__ */ jsx2("span", { className: "text-xs font-mono text-zinc-500", children: displayedAssignment.testCase.testKey }),
946
1300
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
947
1301
  displayedAssignment.testCase.track && /* @__PURE__ */ jsx2(
948
1302
  "span",
@@ -952,11 +1306,11 @@ function BugBearPanel({
952
1306
  children: templateInfo[displayedAssignment.testCase.track.testTemplate || "steps"].icon
953
1307
  }
954
1308
  ),
955
- /* @__PURE__ */ jsx2("span", { className: `text-xs px-1.5 py-0.5 rounded font-medium ${displayedAssignment.testCase.priority === "P0" ? "bg-red-100 text-red-700" : displayedAssignment.testCase.priority === "P1" ? "bg-orange-100 text-orange-700" : "bg-gray-100 text-gray-600"}`, children: displayedAssignment.testCase.priority })
1309
+ /* @__PURE__ */ jsx2("span", { className: `text-xs px-1.5 py-0.5 rounded font-medium ${displayedAssignment.testCase.priority === "P0" ? "bg-red-900/30 text-red-400" : displayedAssignment.testCase.priority === "P1" ? "bg-orange-900/30 text-orange-400" : "bg-zinc-700 text-zinc-400"}`, children: displayedAssignment.testCase.priority })
956
1310
  ] })
957
1311
  ] }),
958
- /* @__PURE__ */ jsx2("h4", { className: "font-medium text-gray-900 text-sm mb-1", children: displayedAssignment.testCase.title }),
959
- displayedAssignment.status === "in_progress" && displayedAssignment.startedAt && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 mb-2 text-xs text-green-600 bg-green-50 px-2 py-1 rounded", children: [
1312
+ /* @__PURE__ */ jsx2("h4", { className: "font-medium text-zinc-100 text-sm mb-1", children: displayedAssignment.testCase.title }),
1313
+ displayedAssignment.status === "in_progress" && displayedAssignment.startedAt && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 mb-2 text-xs text-green-400 bg-green-900/20 px-2 py-1 rounded", children: [
960
1314
  /* @__PURE__ */ jsxs("span", { className: "relative flex h-2 w-2", children: [
961
1315
  /* @__PURE__ */ jsx2("span", { className: "animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75" }),
962
1316
  /* @__PURE__ */ jsx2("span", { className: "relative inline-flex rounded-full h-2 w-2 bg-green-500" })
@@ -964,12 +1318,12 @@ function BugBearPanel({
964
1318
  /* @__PURE__ */ jsx2("span", { className: "font-medium", children: "Testing" }),
965
1319
  /* @__PURE__ */ jsx2("span", { className: "font-mono", children: formatElapsedTime(assignmentElapsedTime) })
966
1320
  ] }),
967
- displayedAssignment.testCase.description && /* @__PURE__ */ jsx2("p", { className: "text-gray-500 text-xs mb-2", children: displayedAssignment.testCase.description }),
1321
+ displayedAssignment.testCase.description && /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-xs mb-2", children: displayedAssignment.testCase.description }),
968
1322
  displayedAssignment.testCase.targetRoute && onNavigate && /* @__PURE__ */ jsxs(
969
1323
  "button",
970
1324
  {
971
1325
  onClick: () => onNavigate(displayedAssignment.testCase.targetRoute),
972
- className: "w-full mb-2 py-1.5 px-3 bg-blue-50 text-blue-700 border border-blue-200 rounded-lg text-xs font-medium hover:bg-blue-100 transition-colors flex items-center justify-center gap-1",
1326
+ className: "w-full mb-2 py-1.5 px-3 bg-blue-900/20 text-blue-300 border border-blue-800 rounded-lg text-xs font-medium hover:bg-blue-900/30 transition-colors flex items-center justify-center gap-1",
973
1327
  children: [
974
1328
  /* @__PURE__ */ jsx2("span", { children: "Go to test location" }),
975
1329
  /* @__PURE__ */ jsx2("span", { children: "\u2192" })
@@ -992,7 +1346,7 @@ function BugBearPanel({
992
1346
  children: [
993
1347
  /* @__PURE__ */ jsx2("span", { children: info.icon }),
994
1348
  /* @__PURE__ */ jsx2("span", { className: "font-medium", children: info.name }),
995
- /* @__PURE__ */ jsxs("span", { className: "text-gray-500", children: [
1349
+ /* @__PURE__ */ jsxs("span", { className: "text-zinc-500", children: [
996
1350
  "\u2022 ",
997
1351
  info.action
998
1352
  ] })
@@ -1003,7 +1357,7 @@ function BugBearPanel({
1003
1357
  "button",
1004
1358
  {
1005
1359
  onClick: () => setShowSteps(!showSteps),
1006
- className: "text-purple-600 text-xs font-medium hover:text-purple-700 flex items-center gap-1",
1360
+ className: "text-blue-400 text-xs font-medium hover:text-blue-300 flex items-center gap-1",
1007
1361
  children: [
1008
1362
  showSteps ? "\u25BC" : "\u25B6",
1009
1363
  " ",
@@ -1012,10 +1366,10 @@ function BugBearPanel({
1012
1366
  }
1013
1367
  ),
1014
1368
  showSteps && template === "steps" && /* @__PURE__ */ jsx2("div", { className: "mt-2 space-y-2", children: steps.map((step, idx) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2 text-xs", children: [
1015
- /* @__PURE__ */ jsx2("span", { className: "w-5 h-5 rounded-full bg-purple-100 text-purple-700 flex items-center justify-center flex-shrink-0 font-medium", children: step.stepNumber }),
1369
+ /* @__PURE__ */ jsx2("span", { className: "w-5 h-5 rounded-full bg-blue-900/50 text-blue-300 flex items-center justify-center flex-shrink-0 font-medium", children: step.stepNumber }),
1016
1370
  /* @__PURE__ */ jsxs("div", { children: [
1017
- /* @__PURE__ */ jsx2("p", { className: "text-gray-700", children: step.action }),
1018
- step.expectedResult && /* @__PURE__ */ jsxs("p", { className: "text-gray-400 mt-0.5", children: [
1371
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-300", children: step.action }),
1372
+ step.expectedResult && /* @__PURE__ */ jsxs("p", { className: "text-zinc-500 mt-0.5", children: [
1019
1373
  "\u2192 ",
1020
1374
  step.expectedResult
1021
1375
  ] })
@@ -1034,39 +1388,39 @@ function BugBearPanel({
1034
1388
  }
1035
1389
  return newResults;
1036
1390
  }),
1037
- className: `w-full flex items-center gap-2 text-xs p-2 rounded border transition-colors text-left ${criteriaResults[idx] === true ? "bg-green-50 border-green-300" : "bg-white border-gray-200 hover:bg-gray-50"}`,
1391
+ className: `w-full flex items-center gap-2 text-xs p-2 rounded border transition-colors text-left ${criteriaResults[idx] === true ? "bg-green-900/20 border-green-700" : "bg-zinc-900 border-zinc-700 hover:bg-zinc-800"}`,
1038
1392
  children: [
1039
1393
  /* @__PURE__ */ jsx2("span", { className: `w-5 h-5 rounded border-2 flex items-center justify-center ${criteriaResults[idx] === true ? "bg-green-500 border-green-500 text-white" : "border-cyan-400 text-cyan-600"}`, children: criteriaResults[idx] === true ? "\u2713" : "" }),
1040
- /* @__PURE__ */ jsx2("p", { className: `flex-1 ${criteriaResults[idx] === true ? "text-green-700" : "text-gray-700"}`, children: step.action })
1394
+ /* @__PURE__ */ jsx2("p", { className: `flex-1 ${criteriaResults[idx] === true ? "text-green-400" : "text-zinc-300"}`, children: step.action })
1041
1395
  ]
1042
1396
  },
1043
1397
  idx
1044
1398
  )),
1045
1399
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-2", children: [
1046
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-400", children: "Tap to check off each item." }),
1400
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500", children: "Tap to check off each item." }),
1047
1401
  Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ jsx2(
1048
1402
  "button",
1049
1403
  {
1050
1404
  onClick: () => setCriteriaResults({}),
1051
- className: "text-xs text-gray-400 hover:text-red-500 transition-colors",
1405
+ className: "text-xs text-zinc-500 hover:text-red-500 transition-colors",
1052
1406
  children: "\u21BA Reset"
1053
1407
  }
1054
1408
  )
1055
1409
  ] })
1056
1410
  ] }),
1057
1411
  showSteps && template === "rubric" && /* @__PURE__ */ jsxs("div", { className: "mt-2 space-y-2", children: [
1058
- steps.map((step, idx) => /* @__PURE__ */ jsxs("div", { className: "bg-white p-2 rounded border border-gray-200", children: [
1412
+ steps.map((step, idx) => /* @__PURE__ */ jsxs("div", { className: "bg-zinc-800 p-2 rounded border border-zinc-700", children: [
1059
1413
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs mb-1", children: [
1060
- /* @__PURE__ */ jsx2("span", { className: "w-5 h-5 rounded bg-purple-100 text-purple-700 flex items-center justify-center font-medium", children: idx + 1 }),
1061
- /* @__PURE__ */ jsx2("p", { className: "text-gray-900 font-medium flex-1", children: step.action })
1414
+ /* @__PURE__ */ jsx2("span", { className: "w-5 h-5 rounded bg-blue-900/50 text-blue-300 flex items-center justify-center font-medium", children: idx + 1 }),
1415
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-100 font-medium flex-1", children: step.action })
1062
1416
  ] }),
1063
- step.expectedResult && /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-500 ml-7 mb-2", children: step.expectedResult }),
1417
+ step.expectedResult && /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500 ml-7 mb-2", children: step.expectedResult }),
1064
1418
  rubricMode === "pass_fail" && /* @__PURE__ */ jsxs("div", { className: "flex gap-2 ml-7", children: [
1065
1419
  /* @__PURE__ */ jsx2(
1066
1420
  "button",
1067
1421
  {
1068
1422
  onClick: () => setCriteriaResults((prev) => ({ ...prev, [idx]: true })),
1069
- className: `flex-1 py-1 px-2 rounded text-xs font-medium transition-colors ${criteriaResults[idx] === true ? "bg-green-500 text-white" : "bg-gray-100 text-gray-600 hover:bg-green-100"}`,
1423
+ className: `flex-1 py-1 px-2 rounded text-xs font-medium transition-colors ${criteriaResults[idx] === true ? "bg-green-500 text-white" : "bg-zinc-700 text-zinc-400 hover:bg-green-900/30"}`,
1070
1424
  children: "\u2713 Pass"
1071
1425
  }
1072
1426
  ),
@@ -1074,7 +1428,7 @@ function BugBearPanel({
1074
1428
  "button",
1075
1429
  {
1076
1430
  onClick: () => setCriteriaResults((prev) => ({ ...prev, [idx]: false })),
1077
- className: `flex-1 py-1 px-2 rounded text-xs font-medium transition-colors ${criteriaResults[idx] === false ? "bg-red-500 text-white" : "bg-gray-100 text-gray-600 hover:bg-red-100"}`,
1431
+ className: `flex-1 py-1 px-2 rounded text-xs font-medium transition-colors ${criteriaResults[idx] === false ? "bg-red-500 text-white" : "bg-zinc-700 text-zinc-400 hover:bg-red-900/30"}`,
1078
1432
  children: "\u2717 Fail"
1079
1433
  }
1080
1434
  )
@@ -1083,28 +1437,28 @@ function BugBearPanel({
1083
1437
  "button",
1084
1438
  {
1085
1439
  onClick: () => setCriteriaResults((prev) => ({ ...prev, [idx]: n })),
1086
- className: `w-8 h-8 rounded font-medium text-sm transition-colors ${criteriaResults[idx] === n ? "bg-purple-600 text-white" : "bg-gray-100 text-gray-600 hover:bg-purple-100"}`,
1440
+ className: `w-8 h-8 rounded font-medium text-sm transition-colors ${criteriaResults[idx] === n ? "bg-blue-500 text-white" : "bg-zinc-700 text-zinc-400 hover:bg-blue-900/50"}`,
1087
1441
  children: n
1088
1442
  },
1089
1443
  n
1090
1444
  )) })
1091
1445
  ] }, idx)),
1092
1446
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-2", children: [
1093
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-400", children: rubricMode === "rating" ? "Rate 1-5 for each criterion." : "Mark each criterion as Pass or Fail." }),
1447
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500", children: rubricMode === "rating" ? "Rate 1-5 for each criterion." : "Mark each criterion as Pass or Fail." }),
1094
1448
  Object.keys(criteriaResults).length > 0 && /* @__PURE__ */ jsx2(
1095
1449
  "button",
1096
1450
  {
1097
1451
  onClick: () => setCriteriaResults({}),
1098
- className: "text-xs text-gray-400 hover:text-red-500 transition-colors",
1452
+ className: "text-xs text-zinc-500 hover:text-red-500 transition-colors",
1099
1453
  children: "\u21BA Reset"
1100
1454
  }
1101
1455
  )
1102
1456
  ] })
1103
1457
  ] }),
1104
- showSteps && template === "freeform" && /* @__PURE__ */ jsxs("div", { className: "mt-2 p-2 bg-amber-50 rounded border border-amber-200 text-xs", children: [
1105
- /* @__PURE__ */ jsx2("p", { className: "text-amber-800 font-medium mb-1", children: "\u{1F4AD} Open Observation" }),
1106
- /* @__PURE__ */ jsx2("p", { className: "text-amber-700", children: "Review the area described above and note:" }),
1107
- /* @__PURE__ */ jsxs("ul", { className: "text-amber-700 mt-1 ml-4 list-disc", children: [
1458
+ showSteps && template === "freeform" && /* @__PURE__ */ jsxs("div", { className: "mt-2 p-2 bg-amber-900/20 rounded border border-amber-800 text-xs", children: [
1459
+ /* @__PURE__ */ jsx2("p", { className: "text-amber-300 font-medium mb-1", children: "\u{1F4AD} Open Observation" }),
1460
+ /* @__PURE__ */ jsx2("p", { className: "text-amber-400", children: "Review the area described above and note:" }),
1461
+ /* @__PURE__ */ jsxs("ul", { className: "text-amber-400 mt-1 ml-4 list-disc", children: [
1108
1462
  /* @__PURE__ */ jsx2("li", { children: "What works well" }),
1109
1463
  /* @__PURE__ */ jsx2("li", { children: "Issues or concerns" }),
1110
1464
  /* @__PURE__ */ jsx2("li", { children: "Suggestions" })
@@ -1112,7 +1466,7 @@ function BugBearPanel({
1112
1466
  ] })
1113
1467
  ] });
1114
1468
  })(),
1115
- /* @__PURE__ */ jsxs("div", { className: "mt-3 p-2 bg-green-50 rounded text-xs text-green-700", children: [
1469
+ /* @__PURE__ */ jsxs("div", { className: "mt-3 p-2 bg-green-900/20 rounded text-xs text-green-400", children: [
1116
1470
  /* @__PURE__ */ jsx2("span", { className: "font-medium", children: displayedAssignment.testCase.track?.testTemplate === "checklist" ? "Pass criteria:" : displayedAssignment.testCase.track?.testTemplate === "rubric" ? "Target score:" : "Expected:" }),
1117
1471
  " ",
1118
1472
  displayedAssignment.testCase.expectedResult
@@ -1123,69 +1477,279 @@ function BugBearPanel({
1123
1477
  "button",
1124
1478
  {
1125
1479
  onClick: handleFail,
1126
- disabled: submitting,
1127
- className: "flex-1 py-2 px-3 bg-red-100 text-red-700 rounded-lg font-medium text-sm hover:bg-red-200 disabled:opacity-50 transition-colors",
1480
+ disabled: submitting || skipping,
1481
+ className: "flex-1 py-2 px-3 bg-red-900/30 text-red-400 rounded-lg font-medium text-sm hover:bg-red-800/30 disabled:opacity-50 transition-colors",
1128
1482
  children: "\u2717 Fail"
1129
1483
  }
1130
1484
  ),
1485
+ /* @__PURE__ */ jsx2(
1486
+ "button",
1487
+ {
1488
+ onClick: handleOpenSkipModal,
1489
+ disabled: submitting || skipping,
1490
+ className: "py-2 px-3 bg-yellow-900/30 text-yellow-400 rounded-lg font-medium text-sm hover:bg-yellow-800/30 disabled:opacity-50 transition-colors",
1491
+ children: "\u23ED\uFE0F Skip"
1492
+ }
1493
+ ),
1131
1494
  /* @__PURE__ */ jsx2(
1132
1495
  "button",
1133
1496
  {
1134
1497
  onClick: handlePass,
1135
- disabled: submitting,
1498
+ disabled: submitting || skipping,
1136
1499
  className: "flex-1 py-2 px-3 bg-green-600 text-white rounded-lg font-medium text-sm hover:bg-green-700 disabled:opacity-50 transition-colors",
1137
1500
  children: submitting ? "..." : "\u2713 Pass"
1138
1501
  }
1139
1502
  )
1140
- ] })
1503
+ ] }),
1504
+ showSkipModal && /* @__PURE__ */ jsx2("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", onClick: () => setShowSkipModal(false), children: /* @__PURE__ */ jsxs("div", { className: "bg-zinc-800 rounded-xl p-4 w-72 shadow-xl border border-zinc-700", onClick: (e) => e.stopPropagation(), children: [
1505
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100 mb-3", children: "Skip Test" }),
1506
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500 mb-3", children: "Please select a reason for skipping this test." }),
1507
+ /* @__PURE__ */ jsx2("div", { className: "space-y-2 mb-4", children: skipReasonOptions.map((option) => /* @__PURE__ */ jsxs(
1508
+ "button",
1509
+ {
1510
+ onClick: () => setSelectedSkipReason(option.value),
1511
+ className: `w-full text-left p-2.5 rounded-lg border transition-colors ${selectedSkipReason === option.value ? "bg-yellow-900/20 border-yellow-700 text-yellow-300" : "bg-zinc-800 border-zinc-700 text-zinc-300 hover:border-yellow-800"}`,
1512
+ children: [
1513
+ /* @__PURE__ */ jsx2("div", { className: "font-medium text-sm", children: option.label }),
1514
+ /* @__PURE__ */ jsx2("div", { className: "text-xs text-zinc-500", children: option.description })
1515
+ ]
1516
+ },
1517
+ option.value
1518
+ )) }),
1519
+ selectedSkipReason === "other" && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1520
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-400 mb-1", children: "Notes (required)" }),
1521
+ /* @__PURE__ */ jsx2(
1522
+ "textarea",
1523
+ {
1524
+ value: skipNotes,
1525
+ onChange: (e) => setSkipNotes(e.target.value),
1526
+ placeholder: "Please explain why you're skipping...",
1527
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-700 rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-yellow-500 focus:border-transparent placeholder:text-zinc-500",
1528
+ rows: 2
1529
+ }
1530
+ )
1531
+ ] }),
1532
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1533
+ /* @__PURE__ */ jsx2(
1534
+ "button",
1535
+ {
1536
+ onClick: () => setShowSkipModal(false),
1537
+ className: "flex-1 py-2 px-3 text-sm font-medium text-zinc-400 bg-zinc-700 rounded-lg hover:bg-zinc-700 transition-colors",
1538
+ children: "Cancel"
1539
+ }
1540
+ ),
1541
+ /* @__PURE__ */ jsx2(
1542
+ "button",
1543
+ {
1544
+ onClick: handleSkip,
1545
+ disabled: !selectedSkipReason || selectedSkipReason === "other" && !skipNotes.trim() || skipping,
1546
+ className: "flex-1 py-2 px-3 text-sm font-medium text-white bg-yellow-500 rounded-lg hover:bg-yellow-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
1547
+ children: skipping ? "Skipping..." : "Skip Test"
1548
+ }
1549
+ )
1550
+ ] })
1551
+ ] }) })
1141
1552
  ] })
1142
1553
  ) : null }),
1554
+ activeTab === "messages" && /* @__PURE__ */ jsx2("div", { children: messageView === "compose" ? (
1555
+ /* Compose New Message */
1556
+ /* @__PURE__ */ jsxs("div", { children: [
1557
+ /* @__PURE__ */ jsx2(
1558
+ "button",
1559
+ {
1560
+ onClick: handleBackToThreadList,
1561
+ className: "text-sm text-zinc-400 hover:text-zinc-200 mb-3 flex items-center gap-1",
1562
+ children: "\u2190 Back to Messages"
1563
+ }
1564
+ ),
1565
+ /* @__PURE__ */ jsxs("div", { className: "text-center mb-4", children: [
1566
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100", children: "New Message" }),
1567
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-xs mt-1", children: "Send a message to the QA team" })
1568
+ ] }),
1569
+ /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
1570
+ /* @__PURE__ */ jsxs("div", { children: [
1571
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Subject" }),
1572
+ /* @__PURE__ */ jsx2(
1573
+ "input",
1574
+ {
1575
+ type: "text",
1576
+ value: composeSubject,
1577
+ onChange: (e) => setComposeSubject(e.target.value),
1578
+ placeholder: "What's this about?",
1579
+ maxLength: 100,
1580
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500"
1581
+ }
1582
+ )
1583
+ ] }),
1584
+ /* @__PURE__ */ jsxs("div", { children: [
1585
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Message" }),
1586
+ /* @__PURE__ */ jsx2(
1587
+ "textarea",
1588
+ {
1589
+ value: composeMessage,
1590
+ onChange: (e) => setComposeMessage(e.target.value),
1591
+ placeholder: "Write your message...",
1592
+ maxLength: 2e3,
1593
+ rows: 6,
1594
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500 resize-none"
1595
+ }
1596
+ )
1597
+ ] }),
1598
+ /* @__PURE__ */ jsx2(
1599
+ "button",
1600
+ {
1601
+ onClick: handleSendNewMessage,
1602
+ disabled: !composeSubject.trim() || !composeMessage.trim() || sendingNewMessage,
1603
+ className: "w-full py-2 px-4 bg-blue-500 text-white rounded-lg font-medium text-sm hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
1604
+ children: sendingNewMessage ? "Sending..." : "Send Message"
1605
+ }
1606
+ )
1607
+ ] })
1608
+ ] })
1609
+ ) : messageView === "thread" && selectedThread ? (
1610
+ /* Thread Detail View */
1611
+ /* @__PURE__ */ jsxs("div", { children: [
1612
+ /* @__PURE__ */ jsx2(
1613
+ "button",
1614
+ {
1615
+ onClick: handleBackToThreadList,
1616
+ className: "text-sm text-zinc-400 hover:text-zinc-200 mb-3 flex items-center gap-1",
1617
+ children: "\u2190 Back to Messages"
1618
+ }
1619
+ ),
1620
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-4 pb-3 border-b border-zinc-700", children: [
1621
+ /* @__PURE__ */ jsx2("span", { className: "text-lg", children: getThreadTypeIcon(selectedThread.threadType) }),
1622
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100 text-sm leading-tight", children: selectedThread.subject || "No subject" })
1623
+ ] }),
1624
+ loadingMessages ? /* @__PURE__ */ jsx2("div", { className: "text-center py-6", children: /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-sm", children: "Loading messages..." }) }) : /* @__PURE__ */ jsx2("div", { className: "space-y-3 mb-4", children: threadMessages.map((message) => /* @__PURE__ */ jsxs(
1625
+ "div",
1626
+ {
1627
+ className: `p-3 rounded-lg ${message.senderType === "tester" ? "bg-blue-900/30 border border-blue-800 ml-6" : "bg-zinc-800 border border-zinc-700 mr-6"}`,
1628
+ children: [
1629
+ /* @__PURE__ */ jsx2("p", { className: `text-xs font-medium mb-1 ${message.senderType === "tester" ? "text-blue-300" : "text-zinc-300"}`, children: message.senderType === "tester" ? "You" : message.senderName }),
1630
+ /* @__PURE__ */ jsx2("p", { className: `text-sm ${message.senderType === "tester" ? "text-blue-100" : "text-zinc-200"}`, children: message.content }),
1631
+ /* @__PURE__ */ jsx2("p", { className: `text-[10px] mt-1 ${message.senderType === "tester" ? "text-blue-400/60" : "text-zinc-500"}`, children: formatMessageTime(message.createdAt) })
1632
+ ]
1633
+ },
1634
+ message.id
1635
+ )) }),
1636
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2 pt-3 border-t border-zinc-700", children: [
1637
+ /* @__PURE__ */ jsx2(
1638
+ "input",
1639
+ {
1640
+ type: "text",
1641
+ value: replyText,
1642
+ onChange: (e) => setReplyText(e.target.value),
1643
+ placeholder: "Type a reply...",
1644
+ maxLength: 1e3,
1645
+ className: "flex-1 px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500",
1646
+ onKeyDown: (e) => e.key === "Enter" && !e.shiftKey && handleSendReply()
1647
+ }
1648
+ ),
1649
+ /* @__PURE__ */ jsx2(
1650
+ "button",
1651
+ {
1652
+ onClick: handleSendReply,
1653
+ disabled: !replyText.trim() || sendingReply,
1654
+ className: "px-3 py-2 bg-blue-500 text-white text-sm rounded-lg hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
1655
+ children: sendingReply ? "..." : "Send"
1656
+ }
1657
+ )
1658
+ ] })
1659
+ ] })
1660
+ ) : (
1661
+ /* Thread List View */
1662
+ /* @__PURE__ */ jsxs("div", { children: [
1663
+ /* @__PURE__ */ jsx2(
1664
+ "button",
1665
+ {
1666
+ onClick: handleStartNewMessage,
1667
+ className: "w-full flex items-center justify-center gap-2 py-2 px-4 mb-3 bg-blue-500 text-white rounded-lg font-medium text-sm hover:bg-blue-600 transition-colors",
1668
+ children: "\u2709\uFE0F New Message"
1669
+ }
1670
+ ),
1671
+ threads.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [
1672
+ /* @__PURE__ */ jsx2("span", { className: "text-4xl", children: "\u{1F4AC}" }),
1673
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-400 mt-2 font-medium", children: "No messages yet" }),
1674
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-sm", children: "Start a conversation or wait for messages from admins" })
1675
+ ] }) : /* @__PURE__ */ jsx2("div", { className: "space-y-2", children: threads.map((thread) => /* @__PURE__ */ jsxs(
1676
+ "button",
1677
+ {
1678
+ onClick: () => handleOpenThread(thread),
1679
+ className: `w-full text-left p-3 rounded-lg border transition-colors ${thread.unreadCount > 0 ? "bg-blue-900/20 border-blue-800 hover:bg-blue-900/30" : "bg-zinc-800 border-zinc-700 hover:bg-zinc-700"}`,
1680
+ children: [
1681
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-1", children: [
1682
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 min-w-0 flex-1", children: [
1683
+ thread.isPinned && /* @__PURE__ */ jsx2("span", { className: "text-xs", children: "\u{1F4CC}" }),
1684
+ /* @__PURE__ */ jsx2("span", { className: "text-xs", children: getThreadTypeIcon(thread.threadType) }),
1685
+ /* @__PURE__ */ jsx2("span", { className: `text-sm truncate ${thread.unreadCount > 0 ? "font-semibold text-zinc-100" : "text-zinc-300"}`, children: thread.subject || "No subject" })
1686
+ ] }),
1687
+ (thread.priority === "high" || thread.priority === "urgent") && /* @__PURE__ */ jsx2("span", { className: `w-2 h-2 rounded-full flex-shrink-0 ml-2 ${thread.priority === "urgent" ? "bg-red-500" : "bg-orange-500"}` })
1688
+ ] }),
1689
+ thread.lastMessage && /* @__PURE__ */ jsxs("p", { className: "text-xs text-zinc-500 truncate", children: [
1690
+ thread.lastMessage.senderName,
1691
+ ": ",
1692
+ thread.lastMessage.content
1693
+ ] }),
1694
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-1.5", children: [
1695
+ thread.unreadCount > 0 ? /* @__PURE__ */ jsxs("span", { className: "text-[10px] px-1.5 py-0.5 bg-blue-500 text-white rounded-full font-medium", children: [
1696
+ thread.unreadCount,
1697
+ " new"
1698
+ ] }) : /* @__PURE__ */ jsx2("span", { className: "text-[10px] text-zinc-600", children: "Read" }),
1699
+ /* @__PURE__ */ jsx2("span", { className: "text-[10px] text-zinc-600", children: formatRelativeTime(thread.lastMessageAt) })
1700
+ ] })
1701
+ ]
1702
+ },
1703
+ thread.id
1704
+ )) })
1705
+ ] })
1706
+ ) }),
1143
1707
  activeTab === "session" && /* @__PURE__ */ jsx2("div", { children: !activeSession ? (
1144
1708
  /* Start Session View */
1145
1709
  /* @__PURE__ */ jsxs("div", { children: [
1146
1710
  /* @__PURE__ */ jsxs("div", { className: "text-center mb-4", children: [
1147
1711
  /* @__PURE__ */ jsx2("span", { className: "text-4xl", children: "\u{1F50D}" }),
1148
- /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-gray-900 mt-2", children: "Exploratory QA Session" }),
1149
- /* @__PURE__ */ jsx2("p", { className: "text-gray-500 text-xs mt-1", children: "Explore freely and capture findings as you go" })
1712
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100 mt-2", children: "Exploratory QA Session" }),
1713
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-xs mt-1", children: "Explore freely and capture findings as you go" })
1150
1714
  ] }),
1151
1715
  focusAreas.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1152
- /* @__PURE__ */ jsxs("label", { className: "block text-xs font-medium text-gray-700 mb-2", children: [
1716
+ /* @__PURE__ */ jsxs("label", { className: "block text-xs font-medium text-zinc-300 mb-2", children: [
1153
1717
  "\u{1F4CC} Focus Areas",
1154
- /* @__PURE__ */ jsx2("span", { className: "ml-1 text-[10px] text-gray-500 font-normal", children: "from your team" })
1718
+ /* @__PURE__ */ jsx2("span", { className: "ml-1 text-[10px] text-zinc-500 font-normal", children: "from your team" })
1155
1719
  ] }),
1156
1720
  /* @__PURE__ */ jsx2("div", { className: "space-y-1.5", children: focusAreas.map((area) => /* @__PURE__ */ jsxs(
1157
1721
  "button",
1158
1722
  {
1159
1723
  onClick: () => setSessionFocusArea(area.name),
1160
- className: `w-full text-left px-3 py-2 rounded-lg text-xs transition-colors border ${sessionFocusArea === area.name ? "bg-amber-50 border-amber-300 text-amber-700" : "bg-amber-50/50 border-amber-200 text-gray-700 hover:bg-amber-50"}`,
1724
+ className: `w-full text-left px-3 py-2 rounded-lg text-xs transition-colors border ${sessionFocusArea === area.name ? "bg-amber-900/20 border-amber-700 text-amber-400" : "bg-amber-900/20/50 border-amber-800 text-zinc-300 hover:bg-amber-900/20"}`,
1161
1725
  children: [
1162
1726
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
1163
1727
  /* @__PURE__ */ jsx2("span", { className: "font-medium", children: area.name }),
1164
- /* @__PURE__ */ jsx2("span", { className: `text-[10px] px-1.5 py-0.5 rounded ${area.priority >= 70 ? "bg-red-100 text-red-600" : area.priority >= 50 ? "bg-amber-100 text-amber-600" : "bg-gray-100 text-gray-500"}`, children: area.priority >= 70 ? "Urgent" : area.priority >= 50 ? "Important" : "Suggested" })
1728
+ /* @__PURE__ */ jsx2("span", { className: `text-[10px] px-1.5 py-0.5 rounded ${area.priority >= 70 ? "bg-red-900/30 text-red-400" : area.priority >= 50 ? "bg-amber-900/30 text-amber-400" : "bg-zinc-700 text-zinc-500"}`, children: area.priority >= 70 ? "Urgent" : area.priority >= 50 ? "Important" : "Suggested" })
1165
1729
  ] }),
1166
- area.description && /* @__PURE__ */ jsx2("p", { className: "text-[10px] text-gray-500 mt-0.5 line-clamp-2", children: area.description })
1730
+ area.description && /* @__PURE__ */ jsx2("p", { className: "text-[10px] text-zinc-500 mt-0.5 line-clamp-2", children: area.description })
1167
1731
  ]
1168
1732
  },
1169
1733
  area.id
1170
1734
  )) })
1171
1735
  ] }),
1172
1736
  suggestedRoutes.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1173
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-2", children: "\u{1F3AF} Suggested Routes to Explore" }),
1737
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-2", children: "\u{1F3AF} Suggested Routes to Explore" }),
1174
1738
  /* @__PURE__ */ jsx2("div", { className: "space-y-1.5 max-h-32 overflow-y-auto", children: suggestedRoutes.map((suggestion, idx) => /* @__PURE__ */ jsx2(
1175
1739
  "button",
1176
1740
  {
1177
1741
  onClick: () => setSessionFocusArea(suggestion.route),
1178
- className: `w-full text-left px-3 py-2 rounded-lg text-xs transition-colors border ${sessionFocusArea === suggestion.route ? "bg-purple-50 border-purple-300 text-purple-700" : "bg-gray-50 border-gray-200 text-gray-700 hover:bg-gray-100"}`,
1742
+ className: `w-full text-left px-3 py-2 rounded-lg text-xs transition-colors border ${sessionFocusArea === suggestion.route ? "bg-blue-950/30 border-blue-700 text-blue-300" : "bg-zinc-800 border-zinc-700 text-zinc-300 hover:bg-zinc-700"}`,
1179
1743
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
1180
1744
  /* @__PURE__ */ jsx2("span", { className: "font-medium truncate", children: suggestion.route }),
1181
- /* @__PURE__ */ jsx2("span", { className: `text-[10px] px-1.5 py-0.5 rounded ${suggestion.priorityScore >= 40 ? "bg-red-100 text-red-600" : suggestion.priorityScore >= 25 ? "bg-amber-100 text-amber-600" : "bg-gray-100 text-gray-500"}`, children: suggestion.reason })
1745
+ /* @__PURE__ */ jsx2("span", { className: `text-[10px] px-1.5 py-0.5 rounded ${suggestion.priorityScore >= 40 ? "bg-red-900/30 text-red-400" : suggestion.priorityScore >= 25 ? "bg-amber-900/30 text-amber-400" : "bg-zinc-700 text-zinc-500"}`, children: suggestion.reason })
1182
1746
  ] })
1183
1747
  },
1184
1748
  idx
1185
1749
  )) })
1186
1750
  ] }),
1187
1751
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1188
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Focus Area (optional)" }),
1752
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Focus Area (optional)" }),
1189
1753
  /* @__PURE__ */ jsx2(
1190
1754
  "input",
1191
1755
  {
@@ -1193,12 +1757,12 @@ function BugBearPanel({
1193
1757
  value: sessionFocusArea,
1194
1758
  onChange: (e) => setSessionFocusArea(e.target.value),
1195
1759
  placeholder: "e.g., checkout flow, settings page",
1196
- className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500"
1760
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500"
1197
1761
  }
1198
1762
  )
1199
1763
  ] }),
1200
1764
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1201
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Platform" }),
1765
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Platform" }),
1202
1766
  /* @__PURE__ */ jsx2("div", { className: "flex gap-2", children: [
1203
1767
  { key: "web", label: "\u{1F310} Web" },
1204
1768
  { key: "ios", label: "\u{1F4F1} iOS" },
@@ -1207,7 +1771,7 @@ function BugBearPanel({
1207
1771
  "button",
1208
1772
  {
1209
1773
  onClick: () => setSessionPlatform(key),
1210
- className: `flex-1 py-2 px-3 rounded-lg text-xs font-medium transition-colors border-2 ${sessionPlatform === key ? "bg-purple-50 border-purple-500 text-purple-700" : "bg-gray-50 border-transparent text-gray-600 hover:bg-gray-100"}`,
1774
+ className: `flex-1 py-2 px-3 rounded-lg text-xs font-medium transition-colors border-2 ${sessionPlatform === key ? "bg-blue-950/30 border-blue-500 text-blue-300" : "bg-zinc-800 border-transparent text-zinc-400 hover:bg-zinc-700"}`,
1211
1775
  children: label
1212
1776
  },
1213
1777
  key
@@ -1231,8 +1795,8 @@ function BugBearPanel({
1231
1795
  /* @__PURE__ */ jsxs("div", { children: [
1232
1796
  /* @__PURE__ */ jsxs("div", { className: "text-center mb-4", children: [
1233
1797
  /* @__PURE__ */ jsx2("span", { className: "text-4xl", children: "\u270B" }),
1234
- /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-gray-900 mt-2", children: "End Session?" }),
1235
- /* @__PURE__ */ jsxs("p", { className: "text-gray-500 text-xs mt-1", children: [
1798
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100 mt-2", children: "End Session?" }),
1799
+ /* @__PURE__ */ jsxs("p", { className: "text-zinc-500 text-xs mt-1", children: [
1236
1800
  "Duration: ",
1237
1801
  formatElapsedTime(sessionElapsedTime),
1238
1802
  " \u2022 ",
@@ -1242,7 +1806,7 @@ function BugBearPanel({
1242
1806
  ] })
1243
1807
  ] }),
1244
1808
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1245
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Session Notes (optional)" }),
1809
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Session Notes (optional)" }),
1246
1810
  /* @__PURE__ */ jsx2(
1247
1811
  "textarea",
1248
1812
  {
@@ -1250,7 +1814,7 @@ function BugBearPanel({
1250
1814
  onChange: (e) => setSessionNotes(e.target.value),
1251
1815
  placeholder: "Any overall observations from this session...",
1252
1816
  rows: 3,
1253
- className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500 resize-none"
1817
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500 resize-none"
1254
1818
  }
1255
1819
  )
1256
1820
  ] }),
@@ -1259,7 +1823,7 @@ function BugBearPanel({
1259
1823
  "button",
1260
1824
  {
1261
1825
  onClick: () => setShowEndConfirm(false),
1262
- className: "flex-1 py-2 px-3 bg-gray-100 text-gray-700 rounded-lg font-medium text-sm hover:bg-gray-200 transition-colors",
1826
+ className: "flex-1 py-2 px-3 bg-zinc-700 text-zinc-300 rounded-lg font-medium text-sm hover:bg-zinc-700 transition-colors",
1263
1827
  children: "Cancel"
1264
1828
  }
1265
1829
  ),
@@ -1278,12 +1842,12 @@ function BugBearPanel({
1278
1842
  /* Add Finding Form */
1279
1843
  /* @__PURE__ */ jsxs("div", { children: [
1280
1844
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
1281
- /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-gray-900 text-sm", children: "Add Finding" }),
1845
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100 text-sm", children: "Add Finding" }),
1282
1846
  /* @__PURE__ */ jsx2(
1283
1847
  "button",
1284
1848
  {
1285
1849
  onClick: () => setShowAddFinding(false),
1286
- className: "text-gray-400 hover:text-gray-600",
1850
+ className: "text-zinc-500 hover:text-zinc-400",
1287
1851
  children: "\u2715"
1288
1852
  }
1289
1853
  )
@@ -1297,25 +1861,25 @@ function BugBearPanel({
1297
1861
  "button",
1298
1862
  {
1299
1863
  onClick: () => setFindingType(type),
1300
- className: `flex-1 py-1.5 px-2 rounded text-xs font-medium transition-colors ${findingType === type ? color === "red" ? "bg-red-100 text-red-700 ring-2 ring-red-400" : color === "orange" ? "bg-orange-100 text-orange-700 ring-2 ring-orange-400" : color === "blue" ? "bg-blue-100 text-blue-700 ring-2 ring-blue-400" : "bg-purple-100 text-purple-700 ring-2 ring-purple-400" : "bg-gray-100 text-gray-600 hover:bg-gray-200"}`,
1864
+ className: `flex-1 py-1.5 px-2 rounded text-xs font-medium transition-colors ${findingType === type ? color === "red" ? "bg-red-900/30 text-red-400 ring-2 ring-red-400" : color === "orange" ? "bg-orange-900/30 text-orange-400 ring-2 ring-orange-400" : color === "blue" ? "bg-blue-900/30 text-blue-300 ring-2 ring-blue-400" : "bg-blue-900/50 text-blue-300 ring-2 ring-blue-400" : "bg-zinc-700 text-zinc-400 hover:bg-zinc-700"}`,
1301
1865
  children: label
1302
1866
  },
1303
1867
  type
1304
1868
  )) }),
1305
1869
  findingType === "bug" && /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1306
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Severity" }),
1870
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Severity" }),
1307
1871
  /* @__PURE__ */ jsx2("div", { className: "flex gap-1", children: ["critical", "high", "medium", "low", "observation"].map((sev) => /* @__PURE__ */ jsx2(
1308
1872
  "button",
1309
1873
  {
1310
1874
  onClick: () => setFindingSeverity(sev),
1311
- className: `flex-1 py-1 px-1 rounded text-xs font-medium capitalize transition-colors ${findingSeverity === sev ? sev === "critical" ? "bg-red-600 text-white" : sev === "high" ? "bg-orange-500 text-white" : sev === "medium" ? "bg-yellow-500 text-black" : sev === "low" ? "bg-gray-500 text-white" : "bg-blue-500 text-white" : "bg-gray-100 text-gray-600 hover:bg-gray-200"}`,
1875
+ className: `flex-1 py-1 px-1 rounded text-xs font-medium capitalize transition-colors ${findingSeverity === sev ? sev === "critical" ? "bg-red-600 text-white" : sev === "high" ? "bg-orange-500 text-white" : sev === "medium" ? "bg-yellow-500 text-black" : sev === "low" ? "bg-zinc-8000 text-white" : "bg-blue-500 text-white" : "bg-zinc-700 text-zinc-400 hover:bg-zinc-700"}`,
1312
1876
  children: sev === "observation" ? "obs" : sev
1313
1877
  },
1314
1878
  sev
1315
1879
  )) })
1316
1880
  ] }),
1317
1881
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1318
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Title *" }),
1882
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Title *" }),
1319
1883
  /* @__PURE__ */ jsx2(
1320
1884
  "input",
1321
1885
  {
@@ -1323,12 +1887,12 @@ function BugBearPanel({
1323
1887
  value: findingTitle,
1324
1888
  onChange: (e) => setFindingTitle(e.target.value),
1325
1889
  placeholder: "Brief description of what you found",
1326
- className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500"
1890
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500"
1327
1891
  }
1328
1892
  )
1329
1893
  ] }),
1330
1894
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1331
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Details (optional)" }),
1895
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Details (optional)" }),
1332
1896
  /* @__PURE__ */ jsx2(
1333
1897
  "textarea",
1334
1898
  {
@@ -1336,7 +1900,7 @@ function BugBearPanel({
1336
1900
  onChange: (e) => setFindingDescription(e.target.value),
1337
1901
  placeholder: "Steps to reproduce, expected behavior, etc.",
1338
1902
  rows: 2,
1339
- className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500 resize-none"
1903
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500 resize-none"
1340
1904
  }
1341
1905
  )
1342
1906
  ] }),
@@ -1345,7 +1909,7 @@ function BugBearPanel({
1345
1909
  {
1346
1910
  onClick: handleAddFinding,
1347
1911
  disabled: addingFinding || !findingTitle.trim(),
1348
- className: "w-full py-2 px-4 bg-purple-600 text-white rounded-lg font-medium text-sm hover:bg-purple-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
1912
+ className: "w-full py-2 px-4 bg-blue-500 text-white rounded-lg font-medium text-sm hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
1349
1913
  children: addingFinding ? "Adding..." : "Add Finding"
1350
1914
  }
1351
1915
  )
@@ -1353,15 +1917,15 @@ function BugBearPanel({
1353
1917
  ) : (
1354
1918
  /* Active Session View */
1355
1919
  /* @__PURE__ */ jsxs("div", { children: [
1356
- /* @__PURE__ */ jsxs("div", { className: "bg-green-50 rounded-lg p-3 mb-3 border border-green-200", children: [
1920
+ /* @__PURE__ */ jsxs("div", { className: "bg-green-900/20 rounded-lg p-3 mb-3 border border-green-800", children: [
1357
1921
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
1358
1922
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1359
1923
  /* @__PURE__ */ jsx2("span", { className: "w-2 h-2 bg-green-500 rounded-full animate-pulse" }),
1360
- /* @__PURE__ */ jsx2("span", { className: "font-medium text-green-800 text-sm", children: "Session Active" })
1924
+ /* @__PURE__ */ jsx2("span", { className: "font-medium text-green-300 text-sm", children: "Session Active" })
1361
1925
  ] }),
1362
- /* @__PURE__ */ jsx2("span", { className: "font-mono text-green-700 text-lg font-semibold", children: formatElapsedTime(sessionElapsedTime) })
1926
+ /* @__PURE__ */ jsx2("span", { className: "font-mono text-green-400 text-lg font-semibold", children: formatElapsedTime(sessionElapsedTime) })
1363
1927
  ] }),
1364
- activeSession.focusArea && /* @__PURE__ */ jsxs("p", { className: "text-green-700 text-xs mt-1", children: [
1928
+ activeSession.focusArea && /* @__PURE__ */ jsxs("p", { className: "text-green-400 text-xs mt-1", children: [
1365
1929
  "Focus: ",
1366
1930
  activeSession.focusArea
1367
1931
  ] })
@@ -1370,7 +1934,7 @@ function BugBearPanel({
1370
1934
  "button",
1371
1935
  {
1372
1936
  onClick: () => setShowAddFinding(true),
1373
- className: "w-full py-3 px-4 bg-purple-600 text-white rounded-lg font-semibold text-sm hover:bg-purple-700 transition-colors flex items-center justify-center gap-2 mb-3",
1937
+ className: "w-full py-3 px-4 bg-blue-500 text-white rounded-lg font-semibold text-sm hover:bg-blue-600 transition-colors flex items-center justify-center gap-2 mb-3",
1374
1938
  children: [
1375
1939
  /* @__PURE__ */ jsx2("span", { children: "+" }),
1376
1940
  " Add Finding"
@@ -1378,23 +1942,23 @@ function BugBearPanel({
1378
1942
  }
1379
1943
  ),
1380
1944
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1381
- /* @__PURE__ */ jsx2("div", { className: "flex items-center justify-between mb-2", children: /* @__PURE__ */ jsxs("span", { className: "text-xs font-medium text-gray-500", children: [
1945
+ /* @__PURE__ */ jsx2("div", { className: "flex items-center justify-between mb-2", children: /* @__PURE__ */ jsxs("span", { className: "text-xs font-medium text-zinc-500", children: [
1382
1946
  "Findings (",
1383
1947
  sessionFindings.length,
1384
1948
  ")"
1385
1949
  ] }) }),
1386
- sessionFindings.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-4 bg-gray-50 rounded-lg", children: [
1387
- /* @__PURE__ */ jsx2("p", { className: "text-gray-400 text-xs", children: "No findings yet" }),
1388
- /* @__PURE__ */ jsx2("p", { className: "text-gray-400 text-xs", children: "Explore and add findings as you go" })
1950
+ sessionFindings.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "text-center py-4 bg-zinc-800 rounded-lg", children: [
1951
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-xs", children: "No findings yet" }),
1952
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-500 text-xs", children: "Explore and add findings as you go" })
1389
1953
  ] }) : /* @__PURE__ */ jsx2("div", { className: "space-y-2 max-h-32 overflow-y-auto", children: sessionFindings.map((finding) => /* @__PURE__ */ jsx2(
1390
1954
  "div",
1391
1955
  {
1392
- className: `p-2 rounded-lg border text-xs ${finding.type === "bug" ? "bg-red-50 border-red-200" : finding.type === "concern" ? "bg-orange-50 border-orange-200" : finding.type === "suggestion" ? "bg-blue-50 border-blue-200" : "bg-purple-50 border-purple-200"}`,
1956
+ className: `p-2 rounded-lg border text-xs ${finding.type === "bug" ? "bg-red-900/20 border-red-800" : finding.type === "concern" ? "bg-orange-900/20 border-orange-200" : finding.type === "suggestion" ? "bg-blue-900/20 border-blue-800" : "bg-blue-950/30 border-blue-800"}`,
1393
1957
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
1394
1958
  /* @__PURE__ */ jsx2("span", { children: finding.type === "bug" ? "\u{1F41B}" : finding.type === "concern" ? "\u26A0\uFE0F" : finding.type === "suggestion" ? "\u{1F4A1}" : "\u2753" }),
1395
1959
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
1396
- /* @__PURE__ */ jsx2("p", { className: "font-medium text-gray-900 truncate", children: finding.title }),
1397
- finding.severity && finding.type === "bug" && /* @__PURE__ */ jsx2("span", { className: `inline-block mt-0.5 px-1 py-0.5 rounded text-[10px] font-medium ${finding.severity === "critical" ? "bg-red-200 text-red-800" : finding.severity === "high" ? "bg-orange-200 text-orange-800" : finding.severity === "medium" ? "bg-yellow-200 text-yellow-800" : "bg-gray-200 text-gray-700"}`, children: finding.severity })
1960
+ /* @__PURE__ */ jsx2("p", { className: "font-medium text-zinc-100 truncate", children: finding.title }),
1961
+ finding.severity && finding.type === "bug" && /* @__PURE__ */ jsx2("span", { className: `inline-block mt-0.5 px-1 py-0.5 rounded text-[10px] font-medium ${finding.severity === "critical" ? "bg-red-900/40 text-red-300" : finding.severity === "high" ? "bg-orange-900/40 text-orange-300" : finding.severity === "medium" ? "bg-yellow-900/40 text-yellow-300" : "bg-zinc-700 text-zinc-300"}`, children: finding.severity })
1398
1962
  ] })
1399
1963
  ] })
1400
1964
  },
@@ -1405,7 +1969,7 @@ function BugBearPanel({
1405
1969
  "button",
1406
1970
  {
1407
1971
  onClick: () => setShowEndConfirm(true),
1408
- className: "w-full py-2 px-4 bg-gray-100 text-gray-700 rounded-lg font-medium text-sm hover:bg-gray-200 transition-colors",
1972
+ className: "w-full py-2 px-4 bg-zinc-700 text-zinc-300 rounded-lg font-medium text-sm hover:bg-zinc-700 transition-colors",
1409
1973
  children: "End Session"
1410
1974
  }
1411
1975
  )
@@ -1413,7 +1977,7 @@ function BugBearPanel({
1413
1977
  ) }),
1414
1978
  activeTab === "report" && /* @__PURE__ */ jsx2("div", { children: submitted ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [
1415
1979
  /* @__PURE__ */ jsx2("span", { className: "text-4xl", children: "\u{1F389}" }),
1416
- /* @__PURE__ */ jsx2("p", { className: "text-gray-600 mt-2 font-medium", children: "Report submitted!" })
1980
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-400 mt-2 font-medium", children: "Report submitted!" })
1417
1981
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1418
1982
  /* @__PURE__ */ jsx2("div", { className: "flex gap-2 mb-4", children: [
1419
1983
  { type: "bug", label: "\u{1F41B} Bug", color: "red" },
@@ -1423,25 +1987,25 @@ function BugBearPanel({
1423
1987
  "button",
1424
1988
  {
1425
1989
  onClick: () => setReportType(type),
1426
- className: `flex-1 py-1.5 px-2 rounded-lg text-xs font-medium transition-colors ${reportType === type ? color === "red" ? "bg-red-100 text-red-700 ring-2 ring-red-500" : color === "blue" ? "bg-blue-100 text-blue-700 ring-2 ring-blue-500" : "bg-purple-100 text-purple-700 ring-2 ring-purple-500" : "bg-gray-100 text-gray-600 hover:bg-gray-200"}`,
1990
+ className: `flex-1 py-1.5 px-2 rounded-lg text-xs font-medium transition-colors ${reportType === type ? color === "red" ? "bg-red-900/30 text-red-400 ring-2 ring-red-500" : color === "blue" ? "bg-blue-900/30 text-blue-300 ring-2 ring-blue-500" : "bg-blue-900/50 text-blue-300 ring-2 ring-blue-500" : "bg-zinc-700 text-zinc-400 hover:bg-zinc-700"}`,
1427
1991
  children: label
1428
1992
  },
1429
1993
  type
1430
1994
  )) }),
1431
1995
  (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1432
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Severity" }),
1996
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Severity" }),
1433
1997
  /* @__PURE__ */ jsx2("div", { className: "flex gap-1", children: ["critical", "high", "medium", "low"].map((sev) => /* @__PURE__ */ jsx2(
1434
1998
  "button",
1435
1999
  {
1436
2000
  onClick: () => setSeverity(sev),
1437
- className: `flex-1 py-1 px-2 rounded text-xs font-medium capitalize transition-colors ${severity === sev ? sev === "critical" ? "bg-red-600 text-white" : sev === "high" ? "bg-orange-500 text-white" : sev === "medium" ? "bg-yellow-500 text-black" : "bg-gray-500 text-white" : "bg-gray-100 text-gray-600 hover:bg-gray-200"}`,
2001
+ className: `flex-1 py-1 px-2 rounded text-xs font-medium capitalize transition-colors ${severity === sev ? sev === "critical" ? "bg-red-600 text-white" : sev === "high" ? "bg-orange-500 text-white" : sev === "medium" ? "bg-yellow-500 text-black" : "bg-zinc-8000 text-white" : "bg-zinc-700 text-zinc-400 hover:bg-zinc-700"}`,
1438
2002
  children: sev
1439
2003
  },
1440
2004
  sev
1441
2005
  )) })
1442
2006
  ] }),
1443
2007
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
1444
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "What happened?" }),
2008
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "What happened?" }),
1445
2009
  /* @__PURE__ */ jsx2(
1446
2010
  "textarea",
1447
2011
  {
@@ -1449,7 +2013,7 @@ function BugBearPanel({
1449
2013
  onChange: (e) => setDescription(e.target.value),
1450
2014
  placeholder: "Describe the issue...",
1451
2015
  rows: 3,
1452
- className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500 resize-none"
2016
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500 resize-none"
1453
2017
  }
1454
2018
  )
1455
2019
  ] }),
@@ -1458,19 +2022,19 @@ function BugBearPanel({
1458
2022
  {
1459
2023
  onClick: handleSubmitReport,
1460
2024
  disabled: submitting || !description.trim(),
1461
- className: "w-full py-2 px-4 bg-purple-600 text-white rounded-lg font-medium text-sm hover:bg-purple-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
2025
+ className: "w-full py-2 px-4 bg-blue-500 text-white rounded-lg font-medium text-sm hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
1462
2026
  children: submitting ? "Submitting..." : "Submit Report"
1463
2027
  }
1464
2028
  )
1465
2029
  ] }) })
1466
2030
  ] }),
1467
- showProfileOverlay && /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 bg-white z-50 flex flex-col rounded-xl overflow-hidden", children: [
1468
- /* @__PURE__ */ jsxs("div", { className: "bg-purple-600 text-white px-4 py-3 flex items-center justify-between", children: [
2031
+ showProfileOverlay && /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 bg-zinc-900 z-50 flex flex-col rounded-xl overflow-hidden", children: [
2032
+ /* @__PURE__ */ jsxs("div", { className: "bg-zinc-950 text-white px-4 py-3 flex items-center justify-between border-b border-zinc-800", children: [
1469
2033
  /* @__PURE__ */ jsx2(
1470
2034
  "button",
1471
2035
  {
1472
2036
  onClick: handleCloseProfile,
1473
- className: "text-sm text-purple-200 hover:text-white transition-colors",
2037
+ className: "text-sm text-zinc-400 hover:text-white transition-colors",
1474
2038
  children: "\u2190 Back"
1475
2039
  }
1476
2040
  ),
@@ -1480,23 +2044,23 @@ function BugBearPanel({
1480
2044
  ] }),
1481
2045
  /* @__PURE__ */ jsx2("div", { className: "flex-1 overflow-y-auto p-4", children: profileSaved ? /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [
1482
2046
  /* @__PURE__ */ jsx2("span", { className: "text-4xl", children: "\u2705" }),
1483
- /* @__PURE__ */ jsx2("p", { className: "text-gray-600 mt-2 font-medium", children: "Profile saved!" })
2047
+ /* @__PURE__ */ jsx2("p", { className: "text-zinc-400 mt-2 font-medium", children: "Profile saved!" })
1484
2048
  ] }) : profileEditing ? (
1485
2049
  /* Edit Profile Form */
1486
2050
  /* @__PURE__ */ jsxs("div", { children: [
1487
2051
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [
1488
- /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-gray-900", children: "Edit Profile" }),
2052
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100", children: "Edit Profile" }),
1489
2053
  /* @__PURE__ */ jsx2(
1490
2054
  "button",
1491
2055
  {
1492
2056
  onClick: handleCancelEditProfile,
1493
- className: "text-sm text-gray-500 hover:text-gray-700",
2057
+ className: "text-sm text-zinc-500 hover:text-zinc-300",
1494
2058
  children: "Cancel"
1495
2059
  }
1496
2060
  )
1497
2061
  ] }),
1498
2062
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1499
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Name" }),
2063
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Name" }),
1500
2064
  /* @__PURE__ */ jsx2(
1501
2065
  "input",
1502
2066
  {
@@ -1504,27 +2068,27 @@ function BugBearPanel({
1504
2068
  value: profileName,
1505
2069
  onChange: (e) => setProfileName(e.target.value),
1506
2070
  placeholder: "Your name",
1507
- className: "w-full px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500"
2071
+ className: "w-full px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500"
1508
2072
  }
1509
2073
  )
1510
2074
  ] }),
1511
2075
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1512
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Primary Email" }),
1513
- /* @__PURE__ */ jsxs("div", { className: "px-3 py-2 bg-gray-100 rounded-lg", children: [
1514
- /* @__PURE__ */ jsx2("p", { className: "text-sm text-gray-700", children: testerInfo?.email }),
1515
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-400 mt-0.5", children: "Main communication email" })
2076
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Primary Email" }),
2077
+ /* @__PURE__ */ jsxs("div", { className: "px-3 py-2 bg-zinc-800 rounded-lg", children: [
2078
+ /* @__PURE__ */ jsx2("p", { className: "text-sm text-zinc-300", children: testerInfo?.email }),
2079
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500 mt-0.5", children: "Main communication email" })
1516
2080
  ] })
1517
2081
  ] }),
1518
2082
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1519
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Additional Testing Emails" }),
1520
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-500 mb-2", children: "Add other emails you use to test on different accounts" }),
2083
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Additional Testing Emails" }),
2084
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500 mb-2", children: "Add other emails you use to test on different accounts" }),
1521
2085
  profileAdditionalEmails.map((email) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 mb-2", children: [
1522
- /* @__PURE__ */ jsx2("span", { className: "flex-1 px-3 py-1.5 bg-purple-50 text-purple-700 text-sm rounded-full", children: email }),
2086
+ /* @__PURE__ */ jsx2("span", { className: "flex-1 px-3 py-1.5 bg-blue-950/30 text-blue-300 text-sm rounded-full", children: email }),
1523
2087
  /* @__PURE__ */ jsx2(
1524
2088
  "button",
1525
2089
  {
1526
2090
  onClick: () => handleRemoveEmail(email),
1527
- className: "text-purple-400 hover:text-red-500 text-sm",
2091
+ className: "text-blue-400 hover:text-red-500 text-sm",
1528
2092
  children: "\u2715"
1529
2093
  }
1530
2094
  )
@@ -1537,7 +2101,7 @@ function BugBearPanel({
1537
2101
  value: newEmailInput,
1538
2102
  onChange: (e) => setNewEmailInput(e.target.value),
1539
2103
  placeholder: "email@example.com",
1540
- className: "flex-1 px-3 py-2 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500",
2104
+ className: "flex-1 px-3 py-2 text-sm bg-zinc-800 text-zinc-100 border border-zinc-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-zinc-500",
1541
2105
  onKeyDown: (e) => e.key === "Enter" && handleAddEmail()
1542
2106
  }
1543
2107
  ),
@@ -1546,15 +2110,15 @@ function BugBearPanel({
1546
2110
  {
1547
2111
  onClick: handleAddEmail,
1548
2112
  disabled: !newEmailInput.trim(),
1549
- className: "px-3 py-2 bg-purple-600 text-white text-sm rounded-lg hover:bg-purple-700 disabled:opacity-50 disabled:cursor-not-allowed",
2113
+ className: "px-3 py-2 bg-blue-500 text-white text-sm rounded-lg hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed",
1550
2114
  children: "Add"
1551
2115
  }
1552
2116
  )
1553
2117
  ] })
1554
2118
  ] }),
1555
2119
  /* @__PURE__ */ jsxs("div", { className: "mb-4", children: [
1556
- /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-gray-700 mb-1", children: "Testing Platforms" }),
1557
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-500 mb-2", children: "Select the platforms you can test on" }),
2120
+ /* @__PURE__ */ jsx2("label", { className: "block text-xs font-medium text-zinc-300 mb-1", children: "Testing Platforms" }),
2121
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500 mb-2", children: "Select the platforms you can test on" }),
1558
2122
  /* @__PURE__ */ jsx2("div", { className: "flex gap-2", children: [
1559
2123
  { key: "ios", label: "\u{1F4F1} iOS" },
1560
2124
  { key: "android", label: "\u{1F916} Android" },
@@ -1563,7 +2127,7 @@ function BugBearPanel({
1563
2127
  "button",
1564
2128
  {
1565
2129
  onClick: () => handleTogglePlatform(key),
1566
- className: `flex-1 py-2 px-3 rounded-lg text-sm font-medium transition-colors border-2 ${profilePlatforms.includes(key) ? "bg-purple-50 border-purple-500 text-purple-700" : "bg-gray-50 border-transparent text-gray-600 hover:bg-gray-100"}`,
2130
+ className: `flex-1 py-2 px-3 rounded-lg text-sm font-medium transition-colors border-2 ${profilePlatforms.includes(key) ? "bg-blue-950/30 border-blue-500 text-blue-300" : "bg-zinc-800 border-transparent text-zinc-400 hover:bg-zinc-700"}`,
1567
2131
  children: label
1568
2132
  },
1569
2133
  key
@@ -1582,31 +2146,31 @@ function BugBearPanel({
1582
2146
  ) : (
1583
2147
  /* Profile View */
1584
2148
  /* @__PURE__ */ jsxs("div", { children: [
1585
- /* @__PURE__ */ jsxs("div", { className: "bg-gray-50 rounded-lg p-4 text-center mb-4", children: [
1586
- /* @__PURE__ */ jsx2("div", { className: "w-16 h-16 mx-auto bg-purple-600 rounded-full flex items-center justify-center mb-3", children: /* @__PURE__ */ jsx2("span", { className: "text-2xl font-semibold text-white", children: testerInfo?.name?.charAt(0)?.toUpperCase() || "?" }) }),
1587
- /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-gray-900", children: testerInfo?.name }),
1588
- /* @__PURE__ */ jsx2("p", { className: "text-sm text-gray-500", children: testerInfo?.email }),
1589
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-6 mt-4 pt-4 border-t border-gray-200", children: [
2149
+ /* @__PURE__ */ jsxs("div", { className: "bg-zinc-800 rounded-lg p-4 text-center mb-4", children: [
2150
+ /* @__PURE__ */ jsx2("div", { className: "w-16 h-16 mx-auto bg-blue-500 rounded-full flex items-center justify-center mb-3", children: /* @__PURE__ */ jsx2("span", { className: "text-2xl font-semibold text-white", children: testerInfo?.name?.charAt(0)?.toUpperCase() || "?" }) }),
2151
+ /* @__PURE__ */ jsx2("h3", { className: "font-semibold text-zinc-100", children: testerInfo?.name }),
2152
+ /* @__PURE__ */ jsx2("p", { className: "text-sm text-zinc-500", children: testerInfo?.email }),
2153
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-6 mt-4 pt-4 border-t border-zinc-700", children: [
1590
2154
  /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
1591
- /* @__PURE__ */ jsx2("p", { className: "text-xl font-bold text-purple-600", children: testerInfo?.assignedTests || 0 }),
1592
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-500", children: "Assigned" })
2155
+ /* @__PURE__ */ jsx2("p", { className: "text-xl font-bold text-blue-400", children: testerInfo?.assignedTests || 0 }),
2156
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500", children: "Assigned" })
1593
2157
  ] }),
1594
2158
  /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
1595
- /* @__PURE__ */ jsx2("p", { className: "text-xl font-bold text-purple-600", children: testerInfo?.completedTests || 0 }),
1596
- /* @__PURE__ */ jsx2("p", { className: "text-xs text-gray-500", children: "Completed" })
2159
+ /* @__PURE__ */ jsx2("p", { className: "text-xl font-bold text-blue-400", children: testerInfo?.completedTests || 0 }),
2160
+ /* @__PURE__ */ jsx2("p", { className: "text-xs text-zinc-500", children: "Completed" })
1597
2161
  ] })
1598
2162
  ] })
1599
2163
  ] }),
1600
- (testerInfo?.additionalEmails?.length || 0) > 0 && /* @__PURE__ */ jsxs("div", { className: "bg-gray-50 rounded-lg p-3 mb-3", children: [
1601
- /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wide mb-2", children: "Additional Emails" }),
1602
- testerInfo?.additionalEmails?.map((email) => /* @__PURE__ */ jsx2("p", { className: "text-sm text-gray-700", children: email }, email))
2164
+ (testerInfo?.additionalEmails?.length || 0) > 0 && /* @__PURE__ */ jsxs("div", { className: "bg-zinc-800 rounded-lg p-3 mb-3", children: [
2165
+ /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-zinc-500 uppercase tracking-wide mb-2", children: "Additional Emails" }),
2166
+ testerInfo?.additionalEmails?.map((email) => /* @__PURE__ */ jsx2("p", { className: "text-sm text-zinc-300", children: email }, email))
1603
2167
  ] }),
1604
- (testerInfo?.platforms?.length || 0) > 0 && /* @__PURE__ */ jsxs("div", { className: "bg-gray-50 rounded-lg p-3 mb-3", children: [
1605
- /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wide mb-2", children: "Testing Platforms" }),
2168
+ (testerInfo?.platforms?.length || 0) > 0 && /* @__PURE__ */ jsxs("div", { className: "bg-zinc-800 rounded-lg p-3 mb-3", children: [
2169
+ /* @__PURE__ */ jsx2("p", { className: "text-xs font-medium text-zinc-500 uppercase tracking-wide mb-2", children: "Testing Platforms" }),
1606
2170
  /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-2", children: testerInfo?.platforms?.map((platform) => /* @__PURE__ */ jsx2(
1607
2171
  "span",
1608
2172
  {
1609
- className: "px-2 py-1 bg-purple-100 text-purple-700 text-xs rounded-full font-medium",
2173
+ className: "px-2 py-1 bg-blue-900/50 text-blue-300 text-xs rounded-full font-medium",
1610
2174
  children: platform === "ios" ? "\u{1F4F1} iOS" : platform === "android" ? "\u{1F916} Android" : "\u{1F310} Web"
1611
2175
  },
1612
2176
  platform
@@ -1616,14 +2180,31 @@ function BugBearPanel({
1616
2180
  "button",
1617
2181
  {
1618
2182
  onClick: handleStartEditProfile,
1619
- className: "w-full py-2 px-4 bg-purple-600 text-white rounded-lg font-medium text-sm hover:bg-purple-700 transition-colors",
2183
+ className: "w-full py-2 px-4 bg-blue-500 text-white rounded-lg font-medium text-sm hover:bg-blue-600 transition-colors",
1620
2184
  children: "Edit Profile"
1621
2185
  }
1622
2186
  )
1623
2187
  ] })
1624
2188
  ) })
1625
2189
  ] }),
1626
- /* @__PURE__ */ jsxs("div", { className: "px-4 py-2 bg-gray-50 border-t border-gray-200 flex items-center justify-between text-xs text-gray-400", children: [
2190
+ /* @__PURE__ */ jsx2("div", { className: "px-4 py-2 bg-zinc-950 border-t border-zinc-800 flex items-center justify-between text-xs text-zinc-500", children: activeTab === "messages" ? /* @__PURE__ */ jsxs(Fragment, { children: [
2191
+ /* @__PURE__ */ jsxs("span", { children: [
2192
+ threads.length,
2193
+ " thread",
2194
+ threads.length !== 1 ? "s" : "",
2195
+ " \xB7 ",
2196
+ unreadCount,
2197
+ " unread"
2198
+ ] }),
2199
+ /* @__PURE__ */ jsx2(
2200
+ "button",
2201
+ {
2202
+ onClick: refreshThreads,
2203
+ className: "hover:text-zinc-300",
2204
+ children: "\u21BB Refresh"
2205
+ }
2206
+ )
2207
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
1627
2208
  /* @__PURE__ */ jsxs("span", { children: [
1628
2209
  pendingCount,
1629
2210
  " pending \xB7 ",
@@ -1634,11 +2215,11 @@ function BugBearPanel({
1634
2215
  "button",
1635
2216
  {
1636
2217
  onClick: refreshAssignments,
1637
- className: "hover:text-gray-600",
2218
+ className: "hover:text-zinc-300",
1638
2219
  children: "\u21BB Refresh"
1639
2220
  }
1640
2221
  )
1641
- ] })
2222
+ ] }) })
1642
2223
  ] })
1643
2224
  ]
1644
2225
  }