@bbearai/react-native 0.1.7 → 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.js +964 -256
- package/dist/index.mjs +964 -256
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -11449,7 +11449,16 @@ var BugBearClient = class {
|
|
|
11449
11449
|
*/
|
|
11450
11450
|
async submitReport(report) {
|
|
11451
11451
|
try {
|
|
11452
|
+
const validationError = this.validateReport(report);
|
|
11453
|
+
if (validationError) {
|
|
11454
|
+
return { success: false, error: validationError };
|
|
11455
|
+
}
|
|
11452
11456
|
const userInfo = await this.getCurrentUserInfo();
|
|
11457
|
+
const rateLimitId = userInfo?.email || this.config.projectId;
|
|
11458
|
+
const rateLimit = await this.checkRateLimit(rateLimitId, "report_submit");
|
|
11459
|
+
if (!rateLimit.allowed) {
|
|
11460
|
+
return { success: false, error: rateLimit.error };
|
|
11461
|
+
}
|
|
11453
11462
|
if (!userInfo) {
|
|
11454
11463
|
console.error("BugBear: No user info available, cannot submit report");
|
|
11455
11464
|
return { success: false, error: "User not authenticated" };
|
|
@@ -11500,6 +11509,7 @@ var BugBearClient = class {
|
|
|
11500
11509
|
const { data, error } = await this.supabase.from("test_assignments").select(`
|
|
11501
11510
|
id,
|
|
11502
11511
|
status,
|
|
11512
|
+
started_at,
|
|
11503
11513
|
test_case:test_cases(
|
|
11504
11514
|
id,
|
|
11505
11515
|
title,
|
|
@@ -11527,6 +11537,7 @@ var BugBearClient = class {
|
|
|
11527
11537
|
return (data || []).map((item) => ({
|
|
11528
11538
|
id: item.id,
|
|
11529
11539
|
status: item.status,
|
|
11540
|
+
startedAt: item.started_at,
|
|
11530
11541
|
testCase: {
|
|
11531
11542
|
id: item.test_case.id,
|
|
11532
11543
|
title: item.test_case.title,
|
|
@@ -11552,47 +11563,430 @@ var BugBearClient = class {
|
|
|
11552
11563
|
return [];
|
|
11553
11564
|
}
|
|
11554
11565
|
}
|
|
11566
|
+
/**
|
|
11567
|
+
* Get assignment by ID with time tracking fields
|
|
11568
|
+
*/
|
|
11569
|
+
async getAssignment(assignmentId) {
|
|
11570
|
+
try {
|
|
11571
|
+
const { data, error } = await this.supabase.from("test_assignments").select(`
|
|
11572
|
+
id,
|
|
11573
|
+
status,
|
|
11574
|
+
started_at,
|
|
11575
|
+
completed_at,
|
|
11576
|
+
duration_seconds,
|
|
11577
|
+
test_case:test_cases(
|
|
11578
|
+
id,
|
|
11579
|
+
title,
|
|
11580
|
+
test_key,
|
|
11581
|
+
description,
|
|
11582
|
+
steps,
|
|
11583
|
+
expected_result,
|
|
11584
|
+
priority,
|
|
11585
|
+
target_route,
|
|
11586
|
+
track:qa_tracks(
|
|
11587
|
+
id,
|
|
11588
|
+
name,
|
|
11589
|
+
icon,
|
|
11590
|
+
color,
|
|
11591
|
+
test_template,
|
|
11592
|
+
rubric_mode,
|
|
11593
|
+
description
|
|
11594
|
+
)
|
|
11595
|
+
)
|
|
11596
|
+
`).eq("id", assignmentId).single();
|
|
11597
|
+
if (error || !data) return null;
|
|
11598
|
+
const testCase = data.test_case;
|
|
11599
|
+
if (!testCase) {
|
|
11600
|
+
console.error("BugBear: Assignment returned without test_case");
|
|
11601
|
+
return null;
|
|
11602
|
+
}
|
|
11603
|
+
const track = testCase.track;
|
|
11604
|
+
return {
|
|
11605
|
+
id: data.id,
|
|
11606
|
+
status: data.status,
|
|
11607
|
+
startedAt: data.started_at,
|
|
11608
|
+
durationSeconds: data.duration_seconds,
|
|
11609
|
+
testCase: {
|
|
11610
|
+
id: testCase.id,
|
|
11611
|
+
title: testCase.title,
|
|
11612
|
+
testKey: testCase.test_key,
|
|
11613
|
+
description: testCase.description,
|
|
11614
|
+
steps: testCase.steps,
|
|
11615
|
+
expectedResult: testCase.expected_result,
|
|
11616
|
+
priority: testCase.priority,
|
|
11617
|
+
targetRoute: testCase.target_route,
|
|
11618
|
+
track: track ? {
|
|
11619
|
+
id: track.id,
|
|
11620
|
+
name: track.name,
|
|
11621
|
+
icon: track.icon,
|
|
11622
|
+
color: track.color,
|
|
11623
|
+
testTemplate: track.test_template,
|
|
11624
|
+
rubricMode: track.rubric_mode || "pass_fail",
|
|
11625
|
+
description: track.description
|
|
11626
|
+
} : void 0
|
|
11627
|
+
}
|
|
11628
|
+
};
|
|
11629
|
+
} catch (err) {
|
|
11630
|
+
console.error("BugBear: Error fetching assignment", err);
|
|
11631
|
+
return null;
|
|
11632
|
+
}
|
|
11633
|
+
}
|
|
11634
|
+
/**
|
|
11635
|
+
* Update assignment status with automatic time tracking
|
|
11636
|
+
* - Sets started_at when status changes to 'in_progress'
|
|
11637
|
+
* - Calculates duration_seconds when status changes to 'passed'/'failed'/'blocked'
|
|
11638
|
+
* - Optionally include feedback when completing a test
|
|
11639
|
+
*/
|
|
11640
|
+
async updateAssignmentStatus(assignmentId, status, options) {
|
|
11641
|
+
try {
|
|
11642
|
+
const { data: currentAssignment, error: fetchError } = await this.supabase.from("test_assignments").select("status, started_at").eq("id", assignmentId).single();
|
|
11643
|
+
if (fetchError || !currentAssignment) {
|
|
11644
|
+
return { success: false, error: "Assignment not found" };
|
|
11645
|
+
}
|
|
11646
|
+
const updateData = { status };
|
|
11647
|
+
let durationSeconds;
|
|
11648
|
+
if (status === "in_progress" && currentAssignment.status !== "in_progress") {
|
|
11649
|
+
updateData.started_at = (/* @__PURE__ */ new Date()).toISOString();
|
|
11650
|
+
}
|
|
11651
|
+
if (["passed", "failed", "blocked"].includes(status)) {
|
|
11652
|
+
updateData.completed_at = (/* @__PURE__ */ new Date()).toISOString();
|
|
11653
|
+
if (currentAssignment.started_at) {
|
|
11654
|
+
const startedAt = new Date(currentAssignment.started_at);
|
|
11655
|
+
const completedAt = /* @__PURE__ */ new Date();
|
|
11656
|
+
durationSeconds = Math.round((completedAt.getTime() - startedAt.getTime()) / 1e3);
|
|
11657
|
+
updateData.duration_seconds = durationSeconds;
|
|
11658
|
+
}
|
|
11659
|
+
}
|
|
11660
|
+
if (options?.notes) {
|
|
11661
|
+
updateData.notes = options.notes;
|
|
11662
|
+
}
|
|
11663
|
+
if (options?.testResult) {
|
|
11664
|
+
updateData.test_result = options.testResult;
|
|
11665
|
+
}
|
|
11666
|
+
const { error } = await this.supabase.from("test_assignments").update(updateData).eq("id", assignmentId);
|
|
11667
|
+
if (error) {
|
|
11668
|
+
console.error("BugBear: Failed to update assignment status", error);
|
|
11669
|
+
return { success: false, error: error.message };
|
|
11670
|
+
}
|
|
11671
|
+
if (options?.feedback && ["passed", "failed", "blocked"].includes(status)) {
|
|
11672
|
+
const { data: assignmentData, error: fetchError2 } = await this.supabase.from("test_assignments").select("test_case_id").eq("id", assignmentId).single();
|
|
11673
|
+
if (fetchError2) {
|
|
11674
|
+
console.error("BugBear: Failed to fetch assignment for feedback", fetchError2);
|
|
11675
|
+
} else if (assignmentData?.test_case_id) {
|
|
11676
|
+
const feedbackResult = await this.submitTestFeedback({
|
|
11677
|
+
testCaseId: assignmentData.test_case_id,
|
|
11678
|
+
assignmentId,
|
|
11679
|
+
feedback: options.feedback,
|
|
11680
|
+
timeToCompleteSeconds: durationSeconds
|
|
11681
|
+
});
|
|
11682
|
+
if (!feedbackResult.success) {
|
|
11683
|
+
console.error("BugBear: Failed to submit feedback", feedbackResult.error);
|
|
11684
|
+
}
|
|
11685
|
+
}
|
|
11686
|
+
}
|
|
11687
|
+
return { success: true, durationSeconds };
|
|
11688
|
+
} catch (err) {
|
|
11689
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
11690
|
+
console.error("BugBear: Error updating assignment status", err);
|
|
11691
|
+
return { success: false, error: message };
|
|
11692
|
+
}
|
|
11693
|
+
}
|
|
11694
|
+
/**
|
|
11695
|
+
* Submit feedback on a test case to help improve test quality
|
|
11696
|
+
* This empowers testers to shape better tests over time
|
|
11697
|
+
*/
|
|
11698
|
+
async submitTestFeedback(options) {
|
|
11699
|
+
try {
|
|
11700
|
+
const testerInfo = await this.getTesterInfo();
|
|
11701
|
+
if (!testerInfo) {
|
|
11702
|
+
return { success: false, error: "Not authenticated as tester" };
|
|
11703
|
+
}
|
|
11704
|
+
const { testCaseId, assignmentId, feedback, timeToCompleteSeconds } = options;
|
|
11705
|
+
if (feedback.rating < 1 || feedback.rating > 5) {
|
|
11706
|
+
return { success: false, error: "Rating must be between 1 and 5" };
|
|
11707
|
+
}
|
|
11708
|
+
const { error: feedbackError } = await this.supabase.from("test_feedback").insert({
|
|
11709
|
+
project_id: this.config.projectId,
|
|
11710
|
+
test_case_id: testCaseId,
|
|
11711
|
+
assignment_id: assignmentId || null,
|
|
11712
|
+
tester_id: testerInfo.id,
|
|
11713
|
+
rating: feedback.rating,
|
|
11714
|
+
clarity_rating: feedback.clarityRating || null,
|
|
11715
|
+
steps_rating: feedback.stepsRating || null,
|
|
11716
|
+
relevance_rating: feedback.relevanceRating || null,
|
|
11717
|
+
feedback_note: feedback.feedbackNote?.trim() || null,
|
|
11718
|
+
suggested_improvement: feedback.suggestedImprovement?.trim() || null,
|
|
11719
|
+
is_outdated: feedback.isOutdated || false,
|
|
11720
|
+
needs_more_detail: feedback.needsMoreDetail || false,
|
|
11721
|
+
steps_unclear: feedback.stepsUnclear || false,
|
|
11722
|
+
expected_result_unclear: feedback.expectedResultUnclear || false,
|
|
11723
|
+
platform: this.getDeviceInfo().platform,
|
|
11724
|
+
time_to_complete_seconds: timeToCompleteSeconds || null
|
|
11725
|
+
});
|
|
11726
|
+
if (feedbackError) {
|
|
11727
|
+
console.error("BugBear: Failed to submit feedback", feedbackError);
|
|
11728
|
+
return { success: false, error: feedbackError.message };
|
|
11729
|
+
}
|
|
11730
|
+
if (assignmentId) {
|
|
11731
|
+
const { error: assignmentError } = await this.supabase.from("test_assignments").update({
|
|
11732
|
+
feedback_rating: feedback.rating,
|
|
11733
|
+
feedback_note: feedback.feedbackNote?.trim() || null,
|
|
11734
|
+
feedback_submitted_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
11735
|
+
}).eq("id", assignmentId);
|
|
11736
|
+
if (assignmentError) {
|
|
11737
|
+
console.error("BugBear: Failed to update assignment feedback fields", assignmentError);
|
|
11738
|
+
}
|
|
11739
|
+
}
|
|
11740
|
+
return { success: true };
|
|
11741
|
+
} catch (err) {
|
|
11742
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
11743
|
+
console.error("BugBear: Error submitting feedback", err);
|
|
11744
|
+
return { success: false, error: message };
|
|
11745
|
+
}
|
|
11746
|
+
}
|
|
11747
|
+
/**
|
|
11748
|
+
* Get the currently active (in_progress) assignment for the tester
|
|
11749
|
+
*/
|
|
11750
|
+
async getActiveAssignment() {
|
|
11751
|
+
try {
|
|
11752
|
+
const testerInfo = await this.getTesterInfo();
|
|
11753
|
+
if (!testerInfo) return null;
|
|
11754
|
+
const { data, error } = await this.supabase.from("test_assignments").select(`
|
|
11755
|
+
id,
|
|
11756
|
+
status,
|
|
11757
|
+
started_at,
|
|
11758
|
+
test_case:test_cases(
|
|
11759
|
+
id,
|
|
11760
|
+
title,
|
|
11761
|
+
test_key,
|
|
11762
|
+
description,
|
|
11763
|
+
steps,
|
|
11764
|
+
expected_result,
|
|
11765
|
+
priority,
|
|
11766
|
+
target_route,
|
|
11767
|
+
track:qa_tracks(
|
|
11768
|
+
id,
|
|
11769
|
+
name,
|
|
11770
|
+
icon,
|
|
11771
|
+
color,
|
|
11772
|
+
test_template,
|
|
11773
|
+
rubric_mode,
|
|
11774
|
+
description
|
|
11775
|
+
)
|
|
11776
|
+
)
|
|
11777
|
+
`).eq("project_id", this.config.projectId).eq("tester_id", testerInfo.id).eq("status", "in_progress").order("started_at", { ascending: false }).limit(1).maybeSingle();
|
|
11778
|
+
if (error || !data) return null;
|
|
11779
|
+
const testCase = data.test_case;
|
|
11780
|
+
if (!testCase) {
|
|
11781
|
+
console.error("BugBear: Active assignment returned without test_case");
|
|
11782
|
+
return null;
|
|
11783
|
+
}
|
|
11784
|
+
const track = testCase.track;
|
|
11785
|
+
return {
|
|
11786
|
+
id: data.id,
|
|
11787
|
+
status: data.status,
|
|
11788
|
+
startedAt: data.started_at,
|
|
11789
|
+
testCase: {
|
|
11790
|
+
id: testCase.id,
|
|
11791
|
+
title: testCase.title,
|
|
11792
|
+
testKey: testCase.test_key,
|
|
11793
|
+
description: testCase.description,
|
|
11794
|
+
steps: testCase.steps,
|
|
11795
|
+
expectedResult: testCase.expected_result,
|
|
11796
|
+
priority: testCase.priority,
|
|
11797
|
+
targetRoute: testCase.target_route,
|
|
11798
|
+
track: track ? {
|
|
11799
|
+
id: track.id,
|
|
11800
|
+
name: track.name,
|
|
11801
|
+
icon: track.icon,
|
|
11802
|
+
color: track.color,
|
|
11803
|
+
testTemplate: track.test_template,
|
|
11804
|
+
rubricMode: track.rubric_mode || "pass_fail",
|
|
11805
|
+
description: track.description
|
|
11806
|
+
} : void 0
|
|
11807
|
+
}
|
|
11808
|
+
};
|
|
11809
|
+
} catch (err) {
|
|
11810
|
+
console.error("BugBear: Error fetching active assignment", err);
|
|
11811
|
+
return null;
|
|
11812
|
+
}
|
|
11813
|
+
}
|
|
11555
11814
|
/**
|
|
11556
11815
|
* Get current tester info
|
|
11557
11816
|
* Looks up tester by email from the host app's authenticated user
|
|
11817
|
+
* Checks both primary email AND additional_emails array
|
|
11818
|
+
* Uses parameterized RPC function to prevent SQL injection
|
|
11558
11819
|
*/
|
|
11559
11820
|
async getTesterInfo() {
|
|
11560
11821
|
try {
|
|
11561
11822
|
const userInfo = await this.getCurrentUserInfo();
|
|
11562
|
-
if (!userInfo) return null;
|
|
11563
|
-
|
|
11823
|
+
if (!userInfo?.email) return null;
|
|
11824
|
+
if (!this.isValidEmail(userInfo.email)) {
|
|
11825
|
+
console.warn("BugBear: Invalid email format");
|
|
11826
|
+
return null;
|
|
11827
|
+
}
|
|
11828
|
+
const { data, error } = await this.supabase.rpc("lookup_tester_by_email", {
|
|
11829
|
+
p_project_id: this.config.projectId,
|
|
11830
|
+
p_email: userInfo.email
|
|
11831
|
+
}).maybeSingle();
|
|
11564
11832
|
if (error || !data) return null;
|
|
11833
|
+
const tester = data;
|
|
11565
11834
|
return {
|
|
11566
|
-
id:
|
|
11567
|
-
name:
|
|
11568
|
-
email:
|
|
11569
|
-
additionalEmails:
|
|
11570
|
-
avatarUrl:
|
|
11571
|
-
platforms:
|
|
11572
|
-
assignedTests:
|
|
11573
|
-
completedTests:
|
|
11835
|
+
id: tester.id,
|
|
11836
|
+
name: tester.name,
|
|
11837
|
+
email: tester.email,
|
|
11838
|
+
additionalEmails: tester.additional_emails || [],
|
|
11839
|
+
avatarUrl: tester.avatar_url || void 0,
|
|
11840
|
+
platforms: tester.platforms || [],
|
|
11841
|
+
assignedTests: tester.assigned_count || 0,
|
|
11842
|
+
completedTests: tester.completed_count || 0
|
|
11574
11843
|
};
|
|
11575
11844
|
} catch (err) {
|
|
11576
11845
|
console.error("BugBear: getTesterInfo error", err);
|
|
11577
11846
|
return null;
|
|
11578
11847
|
}
|
|
11579
11848
|
}
|
|
11849
|
+
/**
|
|
11850
|
+
* Basic email format validation (defense in depth)
|
|
11851
|
+
*/
|
|
11852
|
+
isValidEmail(email) {
|
|
11853
|
+
if (!email || email.length > 254) return false;
|
|
11854
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
11855
|
+
return emailRegex.test(email);
|
|
11856
|
+
}
|
|
11857
|
+
/**
|
|
11858
|
+
* Validate report input before submission
|
|
11859
|
+
* Returns error message if invalid, null if valid
|
|
11860
|
+
*/
|
|
11861
|
+
validateReport(report) {
|
|
11862
|
+
const validTypes = ["bug", "feedback", "suggestion", "test_pass", "test_fail"];
|
|
11863
|
+
if (report.type && !validTypes.includes(report.type)) {
|
|
11864
|
+
return `Invalid report type: ${report.type}. Must be one of: ${validTypes.join(", ")}`;
|
|
11865
|
+
}
|
|
11866
|
+
const validSeverities = ["critical", "high", "medium", "low"];
|
|
11867
|
+
if (report.severity && !validSeverities.includes(report.severity)) {
|
|
11868
|
+
return `Invalid severity: ${report.severity}. Must be one of: ${validSeverities.join(", ")}`;
|
|
11869
|
+
}
|
|
11870
|
+
if (report.title && report.title.length > 500) {
|
|
11871
|
+
return "Title must be 500 characters or less";
|
|
11872
|
+
}
|
|
11873
|
+
if (report.description && report.description.length > 1e4) {
|
|
11874
|
+
return "Description must be 10,000 characters or less";
|
|
11875
|
+
}
|
|
11876
|
+
if (report.screenshots && Array.isArray(report.screenshots)) {
|
|
11877
|
+
if (report.screenshots.length > 10) {
|
|
11878
|
+
return "Maximum 10 screenshots allowed";
|
|
11879
|
+
}
|
|
11880
|
+
for (const url of report.screenshots) {
|
|
11881
|
+
if (typeof url !== "string" || url.length > 2e3) {
|
|
11882
|
+
return "Invalid screenshot URL";
|
|
11883
|
+
}
|
|
11884
|
+
}
|
|
11885
|
+
}
|
|
11886
|
+
return null;
|
|
11887
|
+
}
|
|
11888
|
+
/**
|
|
11889
|
+
* Validate profile update input
|
|
11890
|
+
* Returns error message if invalid, null if valid
|
|
11891
|
+
*/
|
|
11892
|
+
validateProfileUpdate(updates) {
|
|
11893
|
+
if (updates.name !== void 0) {
|
|
11894
|
+
if (typeof updates.name !== "string" || updates.name.length > 100) {
|
|
11895
|
+
return "Name must be 100 characters or less";
|
|
11896
|
+
}
|
|
11897
|
+
}
|
|
11898
|
+
if (updates.additionalEmails !== void 0) {
|
|
11899
|
+
if (!Array.isArray(updates.additionalEmails)) {
|
|
11900
|
+
return "Additional emails must be an array";
|
|
11901
|
+
}
|
|
11902
|
+
if (updates.additionalEmails.length > 5) {
|
|
11903
|
+
return "Maximum 5 additional emails allowed";
|
|
11904
|
+
}
|
|
11905
|
+
for (const email of updates.additionalEmails) {
|
|
11906
|
+
if (!this.isValidEmail(email)) {
|
|
11907
|
+
return `Invalid email format: ${email}`;
|
|
11908
|
+
}
|
|
11909
|
+
}
|
|
11910
|
+
}
|
|
11911
|
+
if (updates.avatarUrl !== void 0 && updates.avatarUrl !== null) {
|
|
11912
|
+
if (typeof updates.avatarUrl !== "string" || updates.avatarUrl.length > 2e3) {
|
|
11913
|
+
return "Invalid avatar URL";
|
|
11914
|
+
}
|
|
11915
|
+
}
|
|
11916
|
+
if (updates.platforms !== void 0) {
|
|
11917
|
+
if (!Array.isArray(updates.platforms)) {
|
|
11918
|
+
return "Platforms must be an array";
|
|
11919
|
+
}
|
|
11920
|
+
const validPlatforms = ["ios", "android", "web", "desktop", "other"];
|
|
11921
|
+
for (const platform of updates.platforms) {
|
|
11922
|
+
if (!validPlatforms.includes(platform)) {
|
|
11923
|
+
return `Invalid platform: ${platform}. Must be one of: ${validPlatforms.join(", ")}`;
|
|
11924
|
+
}
|
|
11925
|
+
}
|
|
11926
|
+
}
|
|
11927
|
+
return null;
|
|
11928
|
+
}
|
|
11929
|
+
/**
|
|
11930
|
+
* Check rate limit for an action
|
|
11931
|
+
* Returns { allowed: boolean, error?: string, remaining?: number }
|
|
11932
|
+
*/
|
|
11933
|
+
async checkRateLimit(identifier, action) {
|
|
11934
|
+
try {
|
|
11935
|
+
const { data, error } = await this.supabase.rpc("check_rate_limit", {
|
|
11936
|
+
p_identifier: identifier,
|
|
11937
|
+
p_action: action,
|
|
11938
|
+
p_project_id: this.config.projectId
|
|
11939
|
+
});
|
|
11940
|
+
if (error) {
|
|
11941
|
+
console.warn("BugBear: Rate limit check failed, allowing request", error.message);
|
|
11942
|
+
return { allowed: true };
|
|
11943
|
+
}
|
|
11944
|
+
if (!data.allowed) {
|
|
11945
|
+
return {
|
|
11946
|
+
allowed: false,
|
|
11947
|
+
error: `Rate limit exceeded. Try again in ${Math.ceil((new Date(data.reset_at).getTime() - Date.now()) / 1e3)} seconds.`,
|
|
11948
|
+
remaining: 0,
|
|
11949
|
+
resetAt: data.reset_at
|
|
11950
|
+
};
|
|
11951
|
+
}
|
|
11952
|
+
return {
|
|
11953
|
+
allowed: true,
|
|
11954
|
+
remaining: data.remaining,
|
|
11955
|
+
resetAt: data.reset_at
|
|
11956
|
+
};
|
|
11957
|
+
} catch (err) {
|
|
11958
|
+
console.warn("BugBear: Rate limit check error", err);
|
|
11959
|
+
return { allowed: true };
|
|
11960
|
+
}
|
|
11961
|
+
}
|
|
11580
11962
|
/**
|
|
11581
11963
|
* Update tester profile
|
|
11582
11964
|
* Allows testers to update their name, additional emails, avatar, and platforms
|
|
11583
11965
|
*/
|
|
11584
11966
|
async updateTesterProfile(updates) {
|
|
11585
11967
|
try {
|
|
11968
|
+
const validationError = this.validateProfileUpdate(updates);
|
|
11969
|
+
if (validationError) {
|
|
11970
|
+
return { success: false, error: validationError };
|
|
11971
|
+
}
|
|
11586
11972
|
const userInfo = await this.getCurrentUserInfo();
|
|
11587
11973
|
if (!userInfo) {
|
|
11588
11974
|
return { success: false, error: "Not authenticated" };
|
|
11589
11975
|
}
|
|
11976
|
+
const rateLimit = await this.checkRateLimit(userInfo.email, "profile_update");
|
|
11977
|
+
if (!rateLimit.allowed) {
|
|
11978
|
+
return { success: false, error: rateLimit.error };
|
|
11979
|
+
}
|
|
11980
|
+
const testerInfo = await this.getTesterInfo();
|
|
11981
|
+
if (!testerInfo) {
|
|
11982
|
+
return { success: false, error: "Not a registered tester" };
|
|
11983
|
+
}
|
|
11590
11984
|
const updateData = {};
|
|
11591
11985
|
if (updates.name !== void 0) updateData.name = updates.name;
|
|
11592
11986
|
if (updates.additionalEmails !== void 0) updateData.additional_emails = updates.additionalEmails;
|
|
11593
11987
|
if (updates.avatarUrl !== void 0) updateData.avatar_url = updates.avatarUrl;
|
|
11594
11988
|
if (updates.platforms !== void 0) updateData.platforms = updates.platforms;
|
|
11595
|
-
const { error } = await this.supabase.from("testers").update(updateData).eq("
|
|
11989
|
+
const { error } = await this.supabase.from("testers").update(updateData).eq("id", testerInfo.id);
|
|
11596
11990
|
if (error) {
|
|
11597
11991
|
console.error("BugBear: updateTesterProfile error", error);
|
|
11598
11992
|
return { success: false, error: error.message };
|
|
@@ -11868,6 +12262,11 @@ var BugBearClient = class {
|
|
|
11868
12262
|
console.error("BugBear: No tester info, cannot send message");
|
|
11869
12263
|
return false;
|
|
11870
12264
|
}
|
|
12265
|
+
const rateLimit = await this.checkRateLimit(testerInfo.email, "message_send");
|
|
12266
|
+
if (!rateLimit.allowed) {
|
|
12267
|
+
console.error("BugBear: Rate limit exceeded for messages");
|
|
12268
|
+
return false;
|
|
12269
|
+
}
|
|
11871
12270
|
const { error } = await this.supabase.from("discussion_messages").insert({
|
|
11872
12271
|
thread_id: threadId,
|
|
11873
12272
|
sender_type: "tester",
|
|
@@ -11962,6 +12361,248 @@ var BugBearClient = class {
|
|
|
11962
12361
|
return { success: false, error: message };
|
|
11963
12362
|
}
|
|
11964
12363
|
}
|
|
12364
|
+
// ============================================
|
|
12365
|
+
// QA Sessions (Sprint 1)
|
|
12366
|
+
// ============================================
|
|
12367
|
+
/**
|
|
12368
|
+
* Start a new QA session for exploratory testing
|
|
12369
|
+
*/
|
|
12370
|
+
async startSession(options = {}) {
|
|
12371
|
+
try {
|
|
12372
|
+
const testerInfo = await this.getTesterInfo();
|
|
12373
|
+
if (!testerInfo) {
|
|
12374
|
+
return { success: false, error: "Not authenticated as a tester" };
|
|
12375
|
+
}
|
|
12376
|
+
const activeSession = await this.getActiveSession();
|
|
12377
|
+
if (activeSession) {
|
|
12378
|
+
return { success: false, error: "You already have an active session. End it before starting a new one." };
|
|
12379
|
+
}
|
|
12380
|
+
const { data, error } = await this.supabase.rpc("start_qa_session", {
|
|
12381
|
+
p_project_id: this.config.projectId,
|
|
12382
|
+
p_tester_id: testerInfo.id,
|
|
12383
|
+
p_focus_area: options.focusArea || null,
|
|
12384
|
+
p_track: options.track || null,
|
|
12385
|
+
p_platform: options.platform || null
|
|
12386
|
+
});
|
|
12387
|
+
if (error) {
|
|
12388
|
+
console.error("BugBear: Failed to start session", error);
|
|
12389
|
+
return { success: false, error: error.message };
|
|
12390
|
+
}
|
|
12391
|
+
const session = await this.getSession(data);
|
|
12392
|
+
if (!session) {
|
|
12393
|
+
return { success: false, error: "Session created but could not be fetched" };
|
|
12394
|
+
}
|
|
12395
|
+
return { success: true, session };
|
|
12396
|
+
} catch (err) {
|
|
12397
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12398
|
+
console.error("BugBear: Error starting session", err);
|
|
12399
|
+
return { success: false, error: message };
|
|
12400
|
+
}
|
|
12401
|
+
}
|
|
12402
|
+
/**
|
|
12403
|
+
* End the current QA session
|
|
12404
|
+
*/
|
|
12405
|
+
async endSession(sessionId, options = {}) {
|
|
12406
|
+
try {
|
|
12407
|
+
const { data, error } = await this.supabase.rpc("end_qa_session", {
|
|
12408
|
+
p_session_id: sessionId,
|
|
12409
|
+
p_notes: options.notes || null,
|
|
12410
|
+
p_routes_covered: options.routesCovered || null
|
|
12411
|
+
});
|
|
12412
|
+
if (error) {
|
|
12413
|
+
console.error("BugBear: Failed to end session", error);
|
|
12414
|
+
return { success: false, error: error.message };
|
|
12415
|
+
}
|
|
12416
|
+
const session = this.transformSession(data);
|
|
12417
|
+
return { success: true, session };
|
|
12418
|
+
} catch (err) {
|
|
12419
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12420
|
+
console.error("BugBear: Error ending session", err);
|
|
12421
|
+
return { success: false, error: message };
|
|
12422
|
+
}
|
|
12423
|
+
}
|
|
12424
|
+
/**
|
|
12425
|
+
* Get the current active session for the tester
|
|
12426
|
+
*/
|
|
12427
|
+
async getActiveSession() {
|
|
12428
|
+
try {
|
|
12429
|
+
const testerInfo = await this.getTesterInfo();
|
|
12430
|
+
if (!testerInfo) return null;
|
|
12431
|
+
const { data, error } = await this.supabase.from("qa_sessions").select("*").eq("project_id", this.config.projectId).eq("tester_id", testerInfo.id).eq("status", "active").order("started_at", { ascending: false }).limit(1).maybeSingle();
|
|
12432
|
+
if (error || !data) return null;
|
|
12433
|
+
return this.transformSession(data);
|
|
12434
|
+
} catch (err) {
|
|
12435
|
+
console.error("BugBear: Error fetching active session", err);
|
|
12436
|
+
return null;
|
|
12437
|
+
}
|
|
12438
|
+
}
|
|
12439
|
+
/**
|
|
12440
|
+
* Get a session by ID
|
|
12441
|
+
*/
|
|
12442
|
+
async getSession(sessionId) {
|
|
12443
|
+
try {
|
|
12444
|
+
const { data, error } = await this.supabase.from("qa_sessions").select("*").eq("id", sessionId).single();
|
|
12445
|
+
if (error || !data) return null;
|
|
12446
|
+
return this.transformSession(data);
|
|
12447
|
+
} catch (err) {
|
|
12448
|
+
console.error("BugBear: Error fetching session", err);
|
|
12449
|
+
return null;
|
|
12450
|
+
}
|
|
12451
|
+
}
|
|
12452
|
+
/**
|
|
12453
|
+
* Get session history for the tester
|
|
12454
|
+
*/
|
|
12455
|
+
async getSessionHistory(limit = 10) {
|
|
12456
|
+
try {
|
|
12457
|
+
const testerInfo = await this.getTesterInfo();
|
|
12458
|
+
if (!testerInfo) return [];
|
|
12459
|
+
const { data, error } = await this.supabase.from("qa_sessions").select("*").eq("project_id", this.config.projectId).eq("tester_id", testerInfo.id).order("started_at", { ascending: false }).limit(limit);
|
|
12460
|
+
if (error) {
|
|
12461
|
+
console.error("BugBear: Failed to fetch session history", error);
|
|
12462
|
+
return [];
|
|
12463
|
+
}
|
|
12464
|
+
return (data || []).map((s) => this.transformSession(s));
|
|
12465
|
+
} catch (err) {
|
|
12466
|
+
console.error("BugBear: Error fetching session history", err);
|
|
12467
|
+
return [];
|
|
12468
|
+
}
|
|
12469
|
+
}
|
|
12470
|
+
/**
|
|
12471
|
+
* Add a finding during a session
|
|
12472
|
+
*/
|
|
12473
|
+
async addFinding(sessionId, options) {
|
|
12474
|
+
try {
|
|
12475
|
+
const { data, error } = await this.supabase.rpc("add_session_finding", {
|
|
12476
|
+
p_session_id: sessionId,
|
|
12477
|
+
p_type: options.type,
|
|
12478
|
+
p_title: options.title,
|
|
12479
|
+
p_description: options.description || null,
|
|
12480
|
+
p_severity: options.severity || "observation",
|
|
12481
|
+
p_route: options.route || null,
|
|
12482
|
+
p_screenshot_url: options.screenshotUrl || null,
|
|
12483
|
+
p_console_logs: options.consoleLogs || null,
|
|
12484
|
+
p_network_snapshot: options.networkSnapshot || null,
|
|
12485
|
+
p_device_info: options.deviceInfo || null,
|
|
12486
|
+
p_app_context: options.appContext || null
|
|
12487
|
+
});
|
|
12488
|
+
if (error) {
|
|
12489
|
+
console.error("BugBear: Failed to add finding", error);
|
|
12490
|
+
return { success: false, error: error.message };
|
|
12491
|
+
}
|
|
12492
|
+
const finding = this.transformFinding(data);
|
|
12493
|
+
return { success: true, finding };
|
|
12494
|
+
} catch (err) {
|
|
12495
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12496
|
+
console.error("BugBear: Error adding finding", err);
|
|
12497
|
+
return { success: false, error: message };
|
|
12498
|
+
}
|
|
12499
|
+
}
|
|
12500
|
+
/**
|
|
12501
|
+
* Get findings for a session
|
|
12502
|
+
*/
|
|
12503
|
+
async getSessionFindings(sessionId) {
|
|
12504
|
+
try {
|
|
12505
|
+
const { data, error } = await this.supabase.from("qa_findings").select("*").eq("session_id", sessionId).order("created_at", { ascending: true });
|
|
12506
|
+
if (error) {
|
|
12507
|
+
console.error("BugBear: Failed to fetch findings", error);
|
|
12508
|
+
return [];
|
|
12509
|
+
}
|
|
12510
|
+
return (data || []).map((f) => this.transformFinding(f));
|
|
12511
|
+
} catch (err) {
|
|
12512
|
+
console.error("BugBear: Error fetching findings", err);
|
|
12513
|
+
return [];
|
|
12514
|
+
}
|
|
12515
|
+
}
|
|
12516
|
+
/**
|
|
12517
|
+
* Convert a finding to a bug report
|
|
12518
|
+
*/
|
|
12519
|
+
async convertFindingToBug(findingId) {
|
|
12520
|
+
try {
|
|
12521
|
+
const { data, error } = await this.supabase.rpc("convert_finding_to_bug", {
|
|
12522
|
+
p_finding_id: findingId
|
|
12523
|
+
});
|
|
12524
|
+
if (error) {
|
|
12525
|
+
console.error("BugBear: Failed to convert finding", error);
|
|
12526
|
+
return { success: false, error: error.message };
|
|
12527
|
+
}
|
|
12528
|
+
return { success: true, bugId: data };
|
|
12529
|
+
} catch (err) {
|
|
12530
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12531
|
+
console.error("BugBear: Error converting finding", err);
|
|
12532
|
+
return { success: false, error: message };
|
|
12533
|
+
}
|
|
12534
|
+
}
|
|
12535
|
+
/**
|
|
12536
|
+
* Dismiss a finding
|
|
12537
|
+
*/
|
|
12538
|
+
async dismissFinding(findingId, reason) {
|
|
12539
|
+
try {
|
|
12540
|
+
const { error } = await this.supabase.from("qa_findings").update({
|
|
12541
|
+
dismissed: true,
|
|
12542
|
+
dismissed_reason: reason || null,
|
|
12543
|
+
dismissed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
12544
|
+
}).eq("id", findingId);
|
|
12545
|
+
if (error) {
|
|
12546
|
+
console.error("BugBear: Failed to dismiss finding", error);
|
|
12547
|
+
return { success: false, error: error.message };
|
|
12548
|
+
}
|
|
12549
|
+
return { success: true };
|
|
12550
|
+
} catch (err) {
|
|
12551
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12552
|
+
console.error("BugBear: Error dismissing finding", err);
|
|
12553
|
+
return { success: false, error: message };
|
|
12554
|
+
}
|
|
12555
|
+
}
|
|
12556
|
+
/**
|
|
12557
|
+
* Transform database session to QASession type
|
|
12558
|
+
*/
|
|
12559
|
+
transformSession(data) {
|
|
12560
|
+
return {
|
|
12561
|
+
id: data.id,
|
|
12562
|
+
projectId: data.project_id,
|
|
12563
|
+
testerId: data.tester_id,
|
|
12564
|
+
focusArea: data.focus_area,
|
|
12565
|
+
track: data.track,
|
|
12566
|
+
platform: data.platform,
|
|
12567
|
+
startedAt: data.started_at,
|
|
12568
|
+
endedAt: data.ended_at,
|
|
12569
|
+
notes: data.notes,
|
|
12570
|
+
routesCovered: data.routes_covered || [],
|
|
12571
|
+
status: data.status,
|
|
12572
|
+
durationMinutes: data.duration_minutes,
|
|
12573
|
+
findingsCount: data.findings_count || 0,
|
|
12574
|
+
bugsFiled: data.bugs_filed || 0,
|
|
12575
|
+
createdAt: data.created_at,
|
|
12576
|
+
updatedAt: data.updated_at
|
|
12577
|
+
};
|
|
12578
|
+
}
|
|
12579
|
+
/**
|
|
12580
|
+
* Transform database finding to QAFinding type
|
|
12581
|
+
*/
|
|
12582
|
+
transformFinding(data) {
|
|
12583
|
+
return {
|
|
12584
|
+
id: data.id,
|
|
12585
|
+
sessionId: data.session_id,
|
|
12586
|
+
projectId: data.project_id,
|
|
12587
|
+
type: data.type,
|
|
12588
|
+
severity: data.severity,
|
|
12589
|
+
title: data.title,
|
|
12590
|
+
description: data.description,
|
|
12591
|
+
route: data.route,
|
|
12592
|
+
screenshotUrl: data.screenshot_url,
|
|
12593
|
+
consoleLogs: data.console_logs,
|
|
12594
|
+
networkSnapshot: data.network_snapshot,
|
|
12595
|
+
deviceInfo: data.device_info,
|
|
12596
|
+
appContext: data.app_context,
|
|
12597
|
+
convertedToBugId: data.converted_to_bug_id,
|
|
12598
|
+
convertedToTestId: data.converted_to_test_id,
|
|
12599
|
+
dismissed: data.dismissed || false,
|
|
12600
|
+
dismissedReason: data.dismissed_reason,
|
|
12601
|
+
dismissedAt: data.dismissed_at,
|
|
12602
|
+
createdAt: data.created_at,
|
|
12603
|
+
updatedAt: data.updated_at
|
|
12604
|
+
};
|
|
12605
|
+
}
|
|
11965
12606
|
};
|
|
11966
12607
|
function createBugBear(config) {
|
|
11967
12608
|
return new BugBearClient(config);
|
|
@@ -12345,6 +12986,7 @@ function BugBearButton({
|
|
|
12345
12986
|
const [modalVisible, setModalVisible] = (0, import_react2.useState)(false);
|
|
12346
12987
|
const [activeTab, setActiveTab] = (0, import_react2.useState)("tests");
|
|
12347
12988
|
const [showSteps, setShowSteps] = (0, import_react2.useState)(false);
|
|
12989
|
+
const [showProfileOverlay, setShowProfileOverlay] = (0, import_react2.useState)(false);
|
|
12348
12990
|
const [messageView, setMessageView] = (0, import_react2.useState)("list");
|
|
12349
12991
|
const [selectedThread, setSelectedThread] = (0, import_react2.useState)(null);
|
|
12350
12992
|
const [threadMessages, setThreadMessages] = (0, import_react2.useState)([]);
|
|
@@ -12545,6 +13187,15 @@ function BugBearButton({
|
|
|
12545
13187
|
}
|
|
12546
13188
|
setSendingNewMessage(false);
|
|
12547
13189
|
};
|
|
13190
|
+
const handleOpenProfile = () => {
|
|
13191
|
+
if (testerInfo) {
|
|
13192
|
+
setProfileName(testerInfo.name);
|
|
13193
|
+
setProfileAdditionalEmails(testerInfo.additionalEmails || []);
|
|
13194
|
+
setProfilePlatforms(testerInfo.platforms || []);
|
|
13195
|
+
}
|
|
13196
|
+
setProfileEditing(false);
|
|
13197
|
+
setShowProfileOverlay(true);
|
|
13198
|
+
};
|
|
12548
13199
|
const handleStartEditProfile = () => {
|
|
12549
13200
|
if (testerInfo) {
|
|
12550
13201
|
setProfileName(testerInfo.name);
|
|
@@ -12557,6 +13208,11 @@ function BugBearButton({
|
|
|
12557
13208
|
setProfileEditing(false);
|
|
12558
13209
|
setNewEmailInput("");
|
|
12559
13210
|
};
|
|
13211
|
+
const handleCloseProfile = () => {
|
|
13212
|
+
setShowProfileOverlay(false);
|
|
13213
|
+
setProfileEditing(false);
|
|
13214
|
+
setNewEmailInput("");
|
|
13215
|
+
};
|
|
12560
13216
|
const handleAddEmail = () => {
|
|
12561
13217
|
const email = newEmailInput.trim().toLowerCase();
|
|
12562
13218
|
if (email && email.includes("@") && !profileAdditionalEmails.includes(email)) {
|
|
@@ -12585,7 +13241,10 @@ function BugBearButton({
|
|
|
12585
13241
|
if (result.success) {
|
|
12586
13242
|
setProfileEditing(false);
|
|
12587
13243
|
setProfileSaved(true);
|
|
12588
|
-
setTimeout(() =>
|
|
13244
|
+
setTimeout(() => {
|
|
13245
|
+
setProfileSaved(false);
|
|
13246
|
+
setShowProfileOverlay(false);
|
|
13247
|
+
}, 1500);
|
|
12589
13248
|
}
|
|
12590
13249
|
setSavingProfile(false);
|
|
12591
13250
|
};
|
|
@@ -12642,7 +13301,7 @@ function BugBearButton({
|
|
|
12642
13301
|
const steps = displayedAssignment.testCase.steps;
|
|
12643
13302
|
const info = templateInfo[template];
|
|
12644
13303
|
const rubricMode = displayedAssignment.testCase.track?.rubricMode || "pass_fail";
|
|
12645
|
-
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: [styles.templateBadge, { backgroundColor: displayedAssignment.testCase.track?.color ? `${displayedAssignment.testCase.track.color}20` : "#
|
|
13304
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: [styles.templateBadge, { backgroundColor: displayedAssignment.testCase.track?.color ? `${displayedAssignment.testCase.track.color}20` : "#3f3f46" }] }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.templateIcon }, info.icon), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.templateName }, info.name), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.templateAction }, "\u2022 ", info.action)), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles.stepsToggle }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.stepsToggleText }, showSteps ? "\u25BC" : "\u25B6", " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && template === "steps" && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.stepsList }, steps.map((step, idx) => /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { key: idx, style: styles.step }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.stepNumber }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.stepContent }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.stepExpected }, "\u2192 ", step.expectedResult))))), showSteps && template === "checklist" && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.stepsList }, steps.map((step, idx) => /* @__PURE__ */ import_react2.default.createElement(
|
|
12646
13305
|
import_react_native2.TouchableOpacity,
|
|
12647
13306
|
{
|
|
12648
13307
|
key: idx,
|
|
@@ -12751,7 +13410,7 @@ function BugBearButton({
|
|
|
12751
13410
|
behavior: import_react_native2.Platform.OS === "ios" ? "padding" : "height",
|
|
12752
13411
|
style: styles.modalContainer
|
|
12753
13412
|
},
|
|
12754
|
-
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.modalContent }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.header }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.headerLeft }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerEmoji }, "\u{1F43B}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerTitle }, "BugBear"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerSubtitle }, testerInfo?.name))), /* @__PURE__ */ import_react2.default.createElement(
|
|
13413
|
+
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.modalContent }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.header }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.headerLeft }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerEmoji }, "\u{1F43B}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerTitle }, "BugBear"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.TouchableOpacity, { onPress: handleOpenProfile, style: styles.headerNameButton }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerSubtitle }, testerInfo?.name), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.headerPencil }, "\u270E")))), /* @__PURE__ */ import_react2.default.createElement(
|
|
12755
13414
|
import_react_native2.TouchableOpacity,
|
|
12756
13415
|
{
|
|
12757
13416
|
onPress: () => setModalVisible(false),
|
|
@@ -12772,13 +13431,6 @@ function BugBearButton({
|
|
|
12772
13431
|
onPress: () => setActiveTab("messages")
|
|
12773
13432
|
},
|
|
12774
13433
|
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.tabWithBadge }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [styles.tabText, activeTab === "messages" && styles.activeTabText] }, "Messages"), unreadCount > 0 && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.tabBadge }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.tabBadgeText }, unreadCount)))
|
|
12775
|
-
), /* @__PURE__ */ import_react2.default.createElement(
|
|
12776
|
-
import_react_native2.TouchableOpacity,
|
|
12777
|
-
{
|
|
12778
|
-
style: [styles.tab, activeTab === "profile" && styles.activeTab],
|
|
12779
|
-
onPress: () => setActiveTab("profile")
|
|
12780
|
-
},
|
|
12781
|
-
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [styles.tabText, activeTab === "profile" && styles.activeTabText] }, "Profile")
|
|
12782
13434
|
), /* @__PURE__ */ import_react2.default.createElement(
|
|
12783
13435
|
import_react_native2.TouchableOpacity,
|
|
12784
13436
|
{
|
|
@@ -12855,7 +13507,7 @@ function BugBearButton({
|
|
|
12855
13507
|
value: composeSubject,
|
|
12856
13508
|
onChangeText: setComposeSubject,
|
|
12857
13509
|
placeholder: "What's this about?",
|
|
12858
|
-
placeholderTextColor: "#
|
|
13510
|
+
placeholderTextColor: "#71717a",
|
|
12859
13511
|
maxLength: 100
|
|
12860
13512
|
}
|
|
12861
13513
|
), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [styles.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ import_react2.default.createElement(
|
|
@@ -12865,7 +13517,7 @@ function BugBearButton({
|
|
|
12865
13517
|
value: composeMessage,
|
|
12866
13518
|
onChangeText: setComposeMessage,
|
|
12867
13519
|
placeholder: "Write your message...",
|
|
12868
|
-
placeholderTextColor: "#
|
|
13520
|
+
placeholderTextColor: "#71717a",
|
|
12869
13521
|
multiline: true,
|
|
12870
13522
|
numberOfLines: 6,
|
|
12871
13523
|
textAlignVertical: "top",
|
|
@@ -12930,7 +13582,70 @@ function BugBearButton({
|
|
|
12930
13582
|
message.senderType === "tester" && styles.messageTimeTester
|
|
12931
13583
|
] }, formatMessageTime(message.createdAt))
|
|
12932
13584
|
))))
|
|
12933
|
-
)), activeTab === "
|
|
13585
|
+
)), activeTab === "report" && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, submitted ? /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.emptyState }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyEmoji }, "\u{1F389}"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyTitle }, "Report submitted!")) : /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.reportTypes }, [
|
|
13586
|
+
{ type: "bug", label: "\u{1F41B} Bug" },
|
|
13587
|
+
{ type: "feedback", label: "\u{1F4A1} Feedback" },
|
|
13588
|
+
{ type: "suggestion", label: "\u2728 Idea" }
|
|
13589
|
+
].map(({ type, label }) => /* @__PURE__ */ import_react2.default.createElement(
|
|
13590
|
+
import_react_native2.TouchableOpacity,
|
|
13591
|
+
{
|
|
13592
|
+
key: type,
|
|
13593
|
+
style: [
|
|
13594
|
+
styles.reportTypeButton,
|
|
13595
|
+
reportType === type && styles.reportTypeActive
|
|
13596
|
+
],
|
|
13597
|
+
onPress: () => setReportType(type)
|
|
13598
|
+
},
|
|
13599
|
+
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
|
|
13600
|
+
styles.reportTypeText,
|
|
13601
|
+
reportType === type && styles.reportTypeTextActive
|
|
13602
|
+
] }, label)
|
|
13603
|
+
))), (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severitySection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Severity"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severityButtons }, ["critical", "high", "medium", "low"].map((sev) => {
|
|
13604
|
+
const activeStyles = {
|
|
13605
|
+
critical: styles.severityCriticalActive,
|
|
13606
|
+
high: styles.severityHighActive,
|
|
13607
|
+
medium: styles.severityMediumActive,
|
|
13608
|
+
low: styles.severityLowActive
|
|
13609
|
+
};
|
|
13610
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
13611
|
+
import_react_native2.TouchableOpacity,
|
|
13612
|
+
{
|
|
13613
|
+
key: sev,
|
|
13614
|
+
style: [
|
|
13615
|
+
styles.severityButton,
|
|
13616
|
+
severity === sev && activeStyles[sev]
|
|
13617
|
+
],
|
|
13618
|
+
onPress: () => setSeverity(sev)
|
|
13619
|
+
},
|
|
13620
|
+
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
|
|
13621
|
+
styles.severityText,
|
|
13622
|
+
severity === sev && styles.severityTextActive
|
|
13623
|
+
] }, sev)
|
|
13624
|
+
);
|
|
13625
|
+
}))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.descriptionSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "What happened?"), /* @__PURE__ */ import_react2.default.createElement(
|
|
13626
|
+
import_react_native2.TextInput,
|
|
13627
|
+
{
|
|
13628
|
+
style: styles.textInput,
|
|
13629
|
+
value: description,
|
|
13630
|
+
onChangeText: setDescription,
|
|
13631
|
+
placeholder: "Describe the issue...",
|
|
13632
|
+
placeholderTextColor: "#71717a",
|
|
13633
|
+
multiline: true,
|
|
13634
|
+
numberOfLines: 4,
|
|
13635
|
+
textAlignVertical: "top"
|
|
13636
|
+
}
|
|
13637
|
+
)), /* @__PURE__ */ import_react2.default.createElement(
|
|
13638
|
+
import_react_native2.TouchableOpacity,
|
|
13639
|
+
{
|
|
13640
|
+
style: [
|
|
13641
|
+
styles.submitButton,
|
|
13642
|
+
(!description.trim() || submitting) && styles.submitButtonDisabled
|
|
13643
|
+
],
|
|
13644
|
+
onPress: handleSubmitReport,
|
|
13645
|
+
disabled: !description.trim() || submitting
|
|
13646
|
+
},
|
|
13647
|
+
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.submitButtonText }, submitting ? "Submitting..." : "Submit Report")
|
|
13648
|
+
)))), showProfileOverlay && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileOverlay }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.ScrollView, { style: styles.profileOverlayContent }, profileSaved ? /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.emptyState }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyEmoji }, "\u2705"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emptyTitle }, "Profile saved!")) : profileEditing ? (
|
|
12934
13649
|
/* Edit Profile Form */
|
|
12935
13650
|
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, null, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileEditHeader }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.profileEditTitle }, "Edit Profile"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.TouchableOpacity, { onPress: handleCancelEditProfile }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.cancelText }, "Cancel"))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Name"), /* @__PURE__ */ import_react2.default.createElement(
|
|
12936
13651
|
import_react_native2.TextInput,
|
|
@@ -12939,7 +13654,7 @@ function BugBearButton({
|
|
|
12939
13654
|
value: profileName,
|
|
12940
13655
|
onChangeText: setProfileName,
|
|
12941
13656
|
placeholder: "Your name",
|
|
12942
|
-
placeholderTextColor: "#
|
|
13657
|
+
placeholderTextColor: "#71717a"
|
|
12943
13658
|
}
|
|
12944
13659
|
)), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Primary Email"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileReadOnly }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.profileReadOnlyText }, testerInfo?.email), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.profileReadOnlyHint }, "Main communication email"))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Additional Testing Emails"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.profileHint }, "Add other emails you use to test on different accounts"), profileAdditionalEmails.map((email) => /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { key: email, style: styles.emailChip }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emailChipText }, email), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.TouchableOpacity, { onPress: () => handleRemoveEmail(email) }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.emailChipRemove }, "\u2715")))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.addEmailRow }, /* @__PURE__ */ import_react2.default.createElement(
|
|
12945
13660
|
import_react_native2.TextInput,
|
|
@@ -12948,7 +13663,7 @@ function BugBearButton({
|
|
|
12948
13663
|
value: newEmailInput,
|
|
12949
13664
|
onChangeText: setNewEmailInput,
|
|
12950
13665
|
placeholder: "email@example.com",
|
|
12951
|
-
placeholderTextColor: "#
|
|
13666
|
+
placeholderTextColor: "#71717a",
|
|
12952
13667
|
keyboardType: "email-address",
|
|
12953
13668
|
autoCapitalize: "none"
|
|
12954
13669
|
}
|
|
@@ -12997,70 +13712,14 @@ function BugBearButton({
|
|
|
12997
13712
|
},
|
|
12998
13713
|
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.editProfileButtonText }, "Edit Profile")
|
|
12999
13714
|
))
|
|
13000
|
-
)),
|
|
13001
|
-
{ type: "bug", label: "\u{1F41B} Bug" },
|
|
13002
|
-
{ type: "feedback", label: "\u{1F4A1} Feedback" },
|
|
13003
|
-
{ type: "suggestion", label: "\u2728 Idea" }
|
|
13004
|
-
].map(({ type, label }) => /* @__PURE__ */ import_react2.default.createElement(
|
|
13715
|
+
)), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.profileOverlayFooter }, /* @__PURE__ */ import_react2.default.createElement(
|
|
13005
13716
|
import_react_native2.TouchableOpacity,
|
|
13006
13717
|
{
|
|
13007
|
-
|
|
13008
|
-
|
|
13009
|
-
styles.reportTypeButton,
|
|
13010
|
-
reportType === type && styles.reportTypeActive
|
|
13011
|
-
],
|
|
13012
|
-
onPress: () => setReportType(type)
|
|
13718
|
+
style: styles.closeProfileButton,
|
|
13719
|
+
onPress: handleCloseProfile
|
|
13013
13720
|
},
|
|
13014
|
-
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style:
|
|
13015
|
-
|
|
13016
|
-
reportType === type && styles.reportTypeTextActive
|
|
13017
|
-
] }, label)
|
|
13018
|
-
))), (reportType === "bug" || reportType === "test_fail") && /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severitySection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "Severity"), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.severityButtons }, ["critical", "high", "medium", "low"].map((sev) => {
|
|
13019
|
-
const activeStyles = {
|
|
13020
|
-
critical: styles.severityCriticalActive,
|
|
13021
|
-
high: styles.severityHighActive,
|
|
13022
|
-
medium: styles.severityMediumActive,
|
|
13023
|
-
low: styles.severityLowActive
|
|
13024
|
-
};
|
|
13025
|
-
return /* @__PURE__ */ import_react2.default.createElement(
|
|
13026
|
-
import_react_native2.TouchableOpacity,
|
|
13027
|
-
{
|
|
13028
|
-
key: sev,
|
|
13029
|
-
style: [
|
|
13030
|
-
styles.severityButton,
|
|
13031
|
-
severity === sev && activeStyles[sev]
|
|
13032
|
-
],
|
|
13033
|
-
onPress: () => setSeverity(sev)
|
|
13034
|
-
},
|
|
13035
|
-
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: [
|
|
13036
|
-
styles.severityText,
|
|
13037
|
-
severity === sev && styles.severityTextActive
|
|
13038
|
-
] }, sev)
|
|
13039
|
-
);
|
|
13040
|
-
}))), /* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.descriptionSection }, /* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.label }, "What happened?"), /* @__PURE__ */ import_react2.default.createElement(
|
|
13041
|
-
import_react_native2.TextInput,
|
|
13042
|
-
{
|
|
13043
|
-
style: styles.textInput,
|
|
13044
|
-
value: description,
|
|
13045
|
-
onChangeText: setDescription,
|
|
13046
|
-
placeholder: "Describe the issue...",
|
|
13047
|
-
placeholderTextColor: "#9CA3AF",
|
|
13048
|
-
multiline: true,
|
|
13049
|
-
numberOfLines: 4,
|
|
13050
|
-
textAlignVertical: "top"
|
|
13051
|
-
}
|
|
13052
|
-
)), /* @__PURE__ */ import_react2.default.createElement(
|
|
13053
|
-
import_react_native2.TouchableOpacity,
|
|
13054
|
-
{
|
|
13055
|
-
style: [
|
|
13056
|
-
styles.submitButton,
|
|
13057
|
-
(!description.trim() || submitting) && styles.submitButtonDisabled
|
|
13058
|
-
],
|
|
13059
|
-
onPress: handleSubmitReport,
|
|
13060
|
-
disabled: !description.trim() || submitting
|
|
13061
|
-
},
|
|
13062
|
-
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.submitButtonText }, submitting ? "Submitting..." : "Submit Report")
|
|
13063
|
-
)))), activeTab === "messages" && messageView === "thread" && selectedThread ? (
|
|
13721
|
+
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.Text, { style: styles.closeProfileButtonText }, "\u2190 Back")
|
|
13722
|
+
))), activeTab === "messages" && messageView === "thread" && selectedThread ? (
|
|
13064
13723
|
/* Reply Composer */
|
|
13065
13724
|
/* @__PURE__ */ import_react2.default.createElement(import_react_native2.View, { style: styles.replyComposer }, /* @__PURE__ */ import_react2.default.createElement(
|
|
13066
13725
|
import_react_native2.TextInput,
|
|
@@ -13069,7 +13728,7 @@ function BugBearButton({
|
|
|
13069
13728
|
value: replyText,
|
|
13070
13729
|
onChangeText: setReplyText,
|
|
13071
13730
|
placeholder: "Type a reply...",
|
|
13072
|
-
placeholderTextColor: "#
|
|
13731
|
+
placeholderTextColor: "#71717a",
|
|
13073
13732
|
multiline: true,
|
|
13074
13733
|
maxLength: 1e3
|
|
13075
13734
|
}
|
|
@@ -13098,13 +13757,13 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13098
13757
|
width: 56,
|
|
13099
13758
|
height: 56,
|
|
13100
13759
|
borderRadius: 28,
|
|
13101
|
-
backgroundColor: "#
|
|
13760
|
+
backgroundColor: "#3B82F6",
|
|
13102
13761
|
justifyContent: "center",
|
|
13103
13762
|
alignItems: "center",
|
|
13104
|
-
shadowColor: "#
|
|
13763
|
+
shadowColor: "#3B82F6",
|
|
13105
13764
|
shadowOffset: { width: 0, height: 4 },
|
|
13106
|
-
shadowOpacity: 0.
|
|
13107
|
-
shadowRadius:
|
|
13765
|
+
shadowOpacity: 0.4,
|
|
13766
|
+
shadowRadius: 12,
|
|
13108
13767
|
elevation: 8,
|
|
13109
13768
|
zIndex: 999999
|
|
13110
13769
|
},
|
|
@@ -13137,10 +13796,10 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13137
13796
|
modalContainer: {
|
|
13138
13797
|
flex: 1,
|
|
13139
13798
|
justifyContent: "flex-end",
|
|
13140
|
-
backgroundColor: "rgba(0, 0, 0, 0.
|
|
13799
|
+
backgroundColor: "rgba(0, 0, 0, 0.6)"
|
|
13141
13800
|
},
|
|
13142
13801
|
modalContent: {
|
|
13143
|
-
backgroundColor: "#
|
|
13802
|
+
backgroundColor: "#18181b",
|
|
13144
13803
|
borderTopLeftRadius: 20,
|
|
13145
13804
|
borderTopRightRadius: 20,
|
|
13146
13805
|
maxHeight: "85%"
|
|
@@ -13149,11 +13808,13 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13149
13808
|
flexDirection: "row",
|
|
13150
13809
|
alignItems: "center",
|
|
13151
13810
|
justifyContent: "space-between",
|
|
13152
|
-
backgroundColor: "#
|
|
13811
|
+
backgroundColor: "#09090b",
|
|
13153
13812
|
paddingHorizontal: 16,
|
|
13154
13813
|
paddingVertical: 12,
|
|
13155
13814
|
borderTopLeftRadius: 20,
|
|
13156
|
-
borderTopRightRadius: 20
|
|
13815
|
+
borderTopRightRadius: 20,
|
|
13816
|
+
borderBottomWidth: 1,
|
|
13817
|
+
borderBottomColor: "#27272a"
|
|
13157
13818
|
},
|
|
13158
13819
|
headerLeft: {
|
|
13159
13820
|
flexDirection: "row",
|
|
@@ -13164,25 +13825,35 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13164
13825
|
marginRight: 10
|
|
13165
13826
|
},
|
|
13166
13827
|
headerTitle: {
|
|
13167
|
-
color: "#
|
|
13828
|
+
color: "#fafafa",
|
|
13168
13829
|
fontSize: 16,
|
|
13169
13830
|
fontWeight: "600"
|
|
13170
13831
|
},
|
|
13171
13832
|
headerSubtitle: {
|
|
13172
|
-
color: "#
|
|
13833
|
+
color: "#71717a",
|
|
13173
13834
|
fontSize: 12
|
|
13174
13835
|
},
|
|
13836
|
+
headerNameButton: {
|
|
13837
|
+
flexDirection: "row",
|
|
13838
|
+
alignItems: "center",
|
|
13839
|
+
gap: 4
|
|
13840
|
+
},
|
|
13841
|
+
headerPencil: {
|
|
13842
|
+
color: "#71717a",
|
|
13843
|
+
fontSize: 11
|
|
13844
|
+
},
|
|
13175
13845
|
closeButton: {
|
|
13176
13846
|
padding: 8
|
|
13177
13847
|
},
|
|
13178
13848
|
closeButtonText: {
|
|
13179
|
-
color: "#
|
|
13849
|
+
color: "#a1a1aa",
|
|
13180
13850
|
fontSize: 18
|
|
13181
13851
|
},
|
|
13182
13852
|
tabs: {
|
|
13183
13853
|
flexDirection: "row",
|
|
13184
13854
|
borderBottomWidth: 1,
|
|
13185
|
-
borderBottomColor: "#
|
|
13855
|
+
borderBottomColor: "#27272a",
|
|
13856
|
+
backgroundColor: "#18181b"
|
|
13186
13857
|
},
|
|
13187
13858
|
tab: {
|
|
13188
13859
|
flex: 1,
|
|
@@ -13191,15 +13862,15 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13191
13862
|
},
|
|
13192
13863
|
activeTab: {
|
|
13193
13864
|
borderBottomWidth: 2,
|
|
13194
|
-
borderBottomColor: "#
|
|
13865
|
+
borderBottomColor: "#3B82F6"
|
|
13195
13866
|
},
|
|
13196
13867
|
tabText: {
|
|
13197
13868
|
fontSize: 14,
|
|
13198
13869
|
fontWeight: "500",
|
|
13199
|
-
color: "#
|
|
13870
|
+
color: "#71717a"
|
|
13200
13871
|
},
|
|
13201
13872
|
activeTabText: {
|
|
13202
|
-
color: "#
|
|
13873
|
+
color: "#3B82F6"
|
|
13203
13874
|
},
|
|
13204
13875
|
content: {
|
|
13205
13876
|
padding: 16,
|
|
@@ -13212,16 +13883,16 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13212
13883
|
paddingHorizontal: 16,
|
|
13213
13884
|
paddingVertical: 12,
|
|
13214
13885
|
borderTopWidth: 1,
|
|
13215
|
-
borderTopColor: "#
|
|
13216
|
-
backgroundColor: "#
|
|
13886
|
+
borderTopColor: "#27272a",
|
|
13887
|
+
backgroundColor: "#09090b"
|
|
13217
13888
|
},
|
|
13218
13889
|
footerText: {
|
|
13219
13890
|
fontSize: 12,
|
|
13220
|
-
color: "#
|
|
13891
|
+
color: "#52525b"
|
|
13221
13892
|
},
|
|
13222
13893
|
refreshText: {
|
|
13223
13894
|
fontSize: 12,
|
|
13224
|
-
color: "#
|
|
13895
|
+
color: "#71717a"
|
|
13225
13896
|
},
|
|
13226
13897
|
emptyState: {
|
|
13227
13898
|
alignItems: "center",
|
|
@@ -13233,7 +13904,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13233
13904
|
emptyTitle: {
|
|
13234
13905
|
fontSize: 18,
|
|
13235
13906
|
fontWeight: "600",
|
|
13236
|
-
color: "#
|
|
13907
|
+
color: "#e4e4e7",
|
|
13237
13908
|
marginTop: 12
|
|
13238
13909
|
},
|
|
13239
13910
|
passedEmoji: {
|
|
@@ -13248,26 +13919,26 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13248
13919
|
},
|
|
13249
13920
|
emptySubtitle: {
|
|
13250
13921
|
fontSize: 14,
|
|
13251
|
-
color: "#
|
|
13922
|
+
color: "#71717a",
|
|
13252
13923
|
marginTop: 4
|
|
13253
13924
|
},
|
|
13254
13925
|
// List view styles
|
|
13255
13926
|
listHeader: {
|
|
13256
13927
|
fontSize: 12,
|
|
13257
|
-
color: "#
|
|
13928
|
+
color: "#71717a",
|
|
13258
13929
|
marginBottom: 12
|
|
13259
13930
|
},
|
|
13260
13931
|
listItem: {
|
|
13261
|
-
backgroundColor: "#
|
|
13932
|
+
backgroundColor: "#27272a",
|
|
13262
13933
|
borderRadius: 12,
|
|
13263
13934
|
padding: 12,
|
|
13264
13935
|
marginBottom: 8,
|
|
13265
13936
|
borderWidth: 1,
|
|
13266
|
-
borderColor: "#
|
|
13937
|
+
borderColor: "#3f3f46"
|
|
13267
13938
|
},
|
|
13268
13939
|
listItemCurrent: {
|
|
13269
|
-
backgroundColor: "#
|
|
13270
|
-
borderColor: "#
|
|
13940
|
+
backgroundColor: "#1e3a5f",
|
|
13941
|
+
borderColor: "#3B82F6"
|
|
13271
13942
|
},
|
|
13272
13943
|
listItemHeader: {
|
|
13273
13944
|
flexDirection: "row",
|
|
@@ -13278,7 +13949,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13278
13949
|
listItemKey: {
|
|
13279
13950
|
fontSize: 12,
|
|
13280
13951
|
fontFamily: import_react_native2.Platform.OS === "ios" ? "Menlo" : "monospace",
|
|
13281
|
-
color: "#
|
|
13952
|
+
color: "#71717a"
|
|
13282
13953
|
},
|
|
13283
13954
|
listItemBadges: {
|
|
13284
13955
|
flexDirection: "row",
|
|
@@ -13287,7 +13958,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13287
13958
|
listItemTitle: {
|
|
13288
13959
|
fontSize: 14,
|
|
13289
13960
|
fontWeight: "600",
|
|
13290
|
-
color: "#
|
|
13961
|
+
color: "#fafafa",
|
|
13291
13962
|
marginBottom: 4
|
|
13292
13963
|
},
|
|
13293
13964
|
listItemMeta: {
|
|
@@ -13296,11 +13967,11 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13296
13967
|
},
|
|
13297
13968
|
listItemMetaText: {
|
|
13298
13969
|
fontSize: 12,
|
|
13299
|
-
color: "#
|
|
13970
|
+
color: "#71717a"
|
|
13300
13971
|
},
|
|
13301
13972
|
currentBadge: {
|
|
13302
13973
|
fontSize: 12,
|
|
13303
|
-
color: "#
|
|
13974
|
+
color: "#3B82F6",
|
|
13304
13975
|
fontWeight: "600",
|
|
13305
13976
|
marginLeft: 8
|
|
13306
13977
|
},
|
|
@@ -13310,15 +13981,17 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13310
13981
|
},
|
|
13311
13982
|
backButtonText: {
|
|
13312
13983
|
fontSize: 14,
|
|
13313
|
-
color: "#
|
|
13984
|
+
color: "#3B82F6",
|
|
13314
13985
|
fontWeight: "500"
|
|
13315
13986
|
},
|
|
13316
13987
|
// Test card styles
|
|
13317
13988
|
testCard: {
|
|
13318
|
-
backgroundColor: "#
|
|
13989
|
+
backgroundColor: "#27272a",
|
|
13319
13990
|
borderRadius: 12,
|
|
13320
13991
|
padding: 16,
|
|
13321
|
-
marginBottom: 16
|
|
13992
|
+
marginBottom: 16,
|
|
13993
|
+
borderWidth: 1,
|
|
13994
|
+
borderColor: "#3f3f46"
|
|
13322
13995
|
},
|
|
13323
13996
|
testHeader: {
|
|
13324
13997
|
flexDirection: "row",
|
|
@@ -13333,7 +14006,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13333
14006
|
testKey: {
|
|
13334
14007
|
fontSize: 12,
|
|
13335
14008
|
fontFamily: import_react_native2.Platform.OS === "ios" ? "Menlo" : "monospace",
|
|
13336
|
-
color: "#
|
|
14009
|
+
color: "#71717a"
|
|
13337
14010
|
},
|
|
13338
14011
|
trackBadge: {
|
|
13339
14012
|
paddingHorizontal: 6,
|
|
@@ -13345,38 +14018,38 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13345
14018
|
color: "#fff"
|
|
13346
14019
|
},
|
|
13347
14020
|
priorityBadge: {
|
|
13348
|
-
backgroundColor: "#
|
|
14021
|
+
backgroundColor: "#3f3f46",
|
|
13349
14022
|
paddingHorizontal: 8,
|
|
13350
14023
|
paddingVertical: 2,
|
|
13351
14024
|
borderRadius: 4
|
|
13352
14025
|
},
|
|
13353
14026
|
priorityP0: {
|
|
13354
|
-
backgroundColor: "#
|
|
14027
|
+
backgroundColor: "#7f1d1d"
|
|
13355
14028
|
},
|
|
13356
14029
|
priorityP1: {
|
|
13357
|
-
backgroundColor: "#
|
|
14030
|
+
backgroundColor: "#78350f"
|
|
13358
14031
|
},
|
|
13359
14032
|
priorityText: {
|
|
13360
14033
|
fontSize: 12,
|
|
13361
14034
|
fontWeight: "600",
|
|
13362
|
-
color: "#
|
|
14035
|
+
color: "#e4e4e7"
|
|
13363
14036
|
},
|
|
13364
14037
|
testTitle: {
|
|
13365
14038
|
fontSize: 16,
|
|
13366
14039
|
fontWeight: "600",
|
|
13367
|
-
color: "#
|
|
14040
|
+
color: "#fafafa",
|
|
13368
14041
|
marginBottom: 4
|
|
13369
14042
|
},
|
|
13370
14043
|
testDescription: {
|
|
13371
14044
|
fontSize: 14,
|
|
13372
|
-
color: "#
|
|
14045
|
+
color: "#a1a1aa",
|
|
13373
14046
|
marginBottom: 8
|
|
13374
14047
|
},
|
|
13375
14048
|
// Navigate button
|
|
13376
14049
|
navigateButton: {
|
|
13377
|
-
backgroundColor: "#
|
|
14050
|
+
backgroundColor: "#1e3a5f",
|
|
13378
14051
|
borderWidth: 1,
|
|
13379
|
-
borderColor: "#
|
|
14052
|
+
borderColor: "#3B82F6",
|
|
13380
14053
|
borderRadius: 8,
|
|
13381
14054
|
paddingVertical: 10,
|
|
13382
14055
|
paddingHorizontal: 16,
|
|
@@ -13386,7 +14059,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13386
14059
|
navigateButtonText: {
|
|
13387
14060
|
fontSize: 14,
|
|
13388
14061
|
fontWeight: "500",
|
|
13389
|
-
color: "#
|
|
14062
|
+
color: "#60a5fa"
|
|
13390
14063
|
},
|
|
13391
14064
|
// Template badge
|
|
13392
14065
|
templateBadge: {
|
|
@@ -13404,12 +14077,12 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13404
14077
|
templateName: {
|
|
13405
14078
|
fontSize: 12,
|
|
13406
14079
|
fontWeight: "600",
|
|
13407
|
-
color: "#
|
|
14080
|
+
color: "#e4e4e7",
|
|
13408
14081
|
marginRight: 4
|
|
13409
14082
|
},
|
|
13410
14083
|
templateAction: {
|
|
13411
14084
|
fontSize: 12,
|
|
13412
|
-
color: "#
|
|
14085
|
+
color: "#71717a"
|
|
13413
14086
|
},
|
|
13414
14087
|
// Steps toggle
|
|
13415
14088
|
stepsToggle: {
|
|
@@ -13417,7 +14090,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13417
14090
|
},
|
|
13418
14091
|
stepsToggleText: {
|
|
13419
14092
|
fontSize: 14,
|
|
13420
|
-
color: "#
|
|
14093
|
+
color: "#3B82F6",
|
|
13421
14094
|
fontWeight: "500"
|
|
13422
14095
|
},
|
|
13423
14096
|
stepsList: {
|
|
@@ -13431,7 +14104,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13431
14104
|
width: 24,
|
|
13432
14105
|
height: 24,
|
|
13433
14106
|
borderRadius: 12,
|
|
13434
|
-
backgroundColor: "#
|
|
14107
|
+
backgroundColor: "#1e3a5f",
|
|
13435
14108
|
justifyContent: "center",
|
|
13436
14109
|
alignItems: "center",
|
|
13437
14110
|
marginRight: 12
|
|
@@ -13439,41 +14112,41 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13439
14112
|
stepNumberText: {
|
|
13440
14113
|
fontSize: 12,
|
|
13441
14114
|
fontWeight: "600",
|
|
13442
|
-
color: "#
|
|
14115
|
+
color: "#3B82F6"
|
|
13443
14116
|
},
|
|
13444
14117
|
stepContent: {
|
|
13445
14118
|
flex: 1
|
|
13446
14119
|
},
|
|
13447
14120
|
stepAction: {
|
|
13448
14121
|
fontSize: 14,
|
|
13449
|
-
color: "#
|
|
14122
|
+
color: "#e4e4e7"
|
|
13450
14123
|
},
|
|
13451
14124
|
stepExpected: {
|
|
13452
14125
|
fontSize: 12,
|
|
13453
|
-
color: "#
|
|
14126
|
+
color: "#71717a",
|
|
13454
14127
|
marginTop: 2
|
|
13455
14128
|
},
|
|
13456
14129
|
// Checklist styles
|
|
13457
14130
|
checklistItem: {
|
|
13458
14131
|
flexDirection: "row",
|
|
13459
14132
|
alignItems: "center",
|
|
13460
|
-
backgroundColor: "#
|
|
14133
|
+
backgroundColor: "#27272a",
|
|
13461
14134
|
borderWidth: 1,
|
|
13462
|
-
borderColor: "#
|
|
14135
|
+
borderColor: "#3f3f46",
|
|
13463
14136
|
borderRadius: 8,
|
|
13464
14137
|
padding: 12,
|
|
13465
14138
|
marginBottom: 8
|
|
13466
14139
|
},
|
|
13467
14140
|
checklistItemChecked: {
|
|
13468
|
-
backgroundColor: "#
|
|
13469
|
-
borderColor: "#
|
|
14141
|
+
backgroundColor: "#14532d",
|
|
14142
|
+
borderColor: "#22C55E"
|
|
13470
14143
|
},
|
|
13471
14144
|
checkbox: {
|
|
13472
14145
|
width: 24,
|
|
13473
14146
|
height: 24,
|
|
13474
14147
|
borderRadius: 4,
|
|
13475
14148
|
borderWidth: 2,
|
|
13476
|
-
borderColor: "#
|
|
14149
|
+
borderColor: "#3B82F6",
|
|
13477
14150
|
marginRight: 12,
|
|
13478
14151
|
justifyContent: "center",
|
|
13479
14152
|
alignItems: "center"
|
|
@@ -13490,16 +14163,16 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13490
14163
|
checklistText: {
|
|
13491
14164
|
flex: 1,
|
|
13492
14165
|
fontSize: 14,
|
|
13493
|
-
color: "#
|
|
14166
|
+
color: "#e4e4e7"
|
|
13494
14167
|
},
|
|
13495
14168
|
checklistTextChecked: {
|
|
13496
|
-
color: "#
|
|
14169
|
+
color: "#4ade80"
|
|
13497
14170
|
},
|
|
13498
14171
|
// Rubric styles
|
|
13499
14172
|
rubricItem: {
|
|
13500
|
-
backgroundColor: "#
|
|
14173
|
+
backgroundColor: "#27272a",
|
|
13501
14174
|
borderWidth: 1,
|
|
13502
|
-
borderColor: "#
|
|
14175
|
+
borderColor: "#3f3f46",
|
|
13503
14176
|
borderRadius: 8,
|
|
13504
14177
|
padding: 12,
|
|
13505
14178
|
marginBottom: 8
|
|
@@ -13513,7 +14186,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13513
14186
|
width: 24,
|
|
13514
14187
|
height: 24,
|
|
13515
14188
|
borderRadius: 4,
|
|
13516
|
-
backgroundColor: "#
|
|
14189
|
+
backgroundColor: "#1e3a5f",
|
|
13517
14190
|
justifyContent: "center",
|
|
13518
14191
|
alignItems: "center",
|
|
13519
14192
|
marginRight: 8
|
|
@@ -13521,17 +14194,17 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13521
14194
|
rubricNumberText: {
|
|
13522
14195
|
fontSize: 12,
|
|
13523
14196
|
fontWeight: "600",
|
|
13524
|
-
color: "#
|
|
14197
|
+
color: "#3B82F6"
|
|
13525
14198
|
},
|
|
13526
14199
|
rubricTitle: {
|
|
13527
14200
|
flex: 1,
|
|
13528
14201
|
fontSize: 14,
|
|
13529
14202
|
fontWeight: "500",
|
|
13530
|
-
color: "#
|
|
14203
|
+
color: "#fafafa"
|
|
13531
14204
|
},
|
|
13532
14205
|
rubricExpected: {
|
|
13533
14206
|
fontSize: 12,
|
|
13534
|
-
color: "#
|
|
14207
|
+
color: "#71717a",
|
|
13535
14208
|
marginLeft: 32,
|
|
13536
14209
|
marginBottom: 8
|
|
13537
14210
|
},
|
|
@@ -13545,7 +14218,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13545
14218
|
paddingVertical: 8,
|
|
13546
14219
|
paddingHorizontal: 12,
|
|
13547
14220
|
borderRadius: 6,
|
|
13548
|
-
backgroundColor: "#
|
|
14221
|
+
backgroundColor: "#3f3f46",
|
|
13549
14222
|
alignItems: "center"
|
|
13550
14223
|
},
|
|
13551
14224
|
passButtonActive: {
|
|
@@ -13557,7 +14230,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13557
14230
|
passFailButtonText: {
|
|
13558
14231
|
fontSize: 12,
|
|
13559
14232
|
fontWeight: "600",
|
|
13560
|
-
color: "#
|
|
14233
|
+
color: "#a1a1aa"
|
|
13561
14234
|
},
|
|
13562
14235
|
passButtonTextActive: {
|
|
13563
14236
|
color: "#fff"
|
|
@@ -13574,17 +14247,17 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13574
14247
|
width: 36,
|
|
13575
14248
|
height: 36,
|
|
13576
14249
|
borderRadius: 6,
|
|
13577
|
-
backgroundColor: "#
|
|
14250
|
+
backgroundColor: "#3f3f46",
|
|
13578
14251
|
justifyContent: "center",
|
|
13579
14252
|
alignItems: "center"
|
|
13580
14253
|
},
|
|
13581
14254
|
ratingButtonActive: {
|
|
13582
|
-
backgroundColor: "#
|
|
14255
|
+
backgroundColor: "#3B82F6"
|
|
13583
14256
|
},
|
|
13584
14257
|
ratingButtonText: {
|
|
13585
14258
|
fontSize: 14,
|
|
13586
14259
|
fontWeight: "600",
|
|
13587
|
-
color: "#
|
|
14260
|
+
color: "#a1a1aa"
|
|
13588
14261
|
},
|
|
13589
14262
|
ratingButtonTextActive: {
|
|
13590
14263
|
color: "#fff"
|
|
@@ -13598,17 +14271,17 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13598
14271
|
},
|
|
13599
14272
|
helperText: {
|
|
13600
14273
|
fontSize: 12,
|
|
13601
|
-
color: "#
|
|
14274
|
+
color: "#71717a"
|
|
13602
14275
|
},
|
|
13603
14276
|
resetText: {
|
|
13604
14277
|
fontSize: 12,
|
|
13605
|
-
color: "#
|
|
14278
|
+
color: "#71717a"
|
|
13606
14279
|
},
|
|
13607
14280
|
// Freeform styles
|
|
13608
14281
|
freeformBox: {
|
|
13609
|
-
backgroundColor: "#
|
|
14282
|
+
backgroundColor: "#422006",
|
|
13610
14283
|
borderWidth: 1,
|
|
13611
|
-
borderColor: "#
|
|
14284
|
+
borderColor: "#a16207",
|
|
13612
14285
|
borderRadius: 8,
|
|
13613
14286
|
padding: 12,
|
|
13614
14287
|
marginTop: 8
|
|
@@ -13616,22 +14289,22 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13616
14289
|
freeformTitle: {
|
|
13617
14290
|
fontSize: 14,
|
|
13618
14291
|
fontWeight: "600",
|
|
13619
|
-
color: "#
|
|
14292
|
+
color: "#fbbf24",
|
|
13620
14293
|
marginBottom: 4
|
|
13621
14294
|
},
|
|
13622
14295
|
freeformText: {
|
|
13623
14296
|
fontSize: 12,
|
|
13624
|
-
color: "#
|
|
14297
|
+
color: "#fcd34d",
|
|
13625
14298
|
marginBottom: 4
|
|
13626
14299
|
},
|
|
13627
14300
|
freeformBullet: {
|
|
13628
14301
|
fontSize: 12,
|
|
13629
|
-
color: "#
|
|
14302
|
+
color: "#fcd34d",
|
|
13630
14303
|
marginLeft: 8
|
|
13631
14304
|
},
|
|
13632
14305
|
// Expected result
|
|
13633
14306
|
expectedResult: {
|
|
13634
|
-
backgroundColor: "#
|
|
14307
|
+
backgroundColor: "#14532d",
|
|
13635
14308
|
padding: 12,
|
|
13636
14309
|
borderRadius: 8,
|
|
13637
14310
|
marginTop: 12
|
|
@@ -13639,12 +14312,12 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13639
14312
|
expectedLabel: {
|
|
13640
14313
|
fontSize: 12,
|
|
13641
14314
|
fontWeight: "600",
|
|
13642
|
-
color: "#
|
|
14315
|
+
color: "#4ade80",
|
|
13643
14316
|
marginBottom: 4
|
|
13644
14317
|
},
|
|
13645
14318
|
expectedText: {
|
|
13646
14319
|
fontSize: 14,
|
|
13647
|
-
color: "#
|
|
14320
|
+
color: "#86efac"
|
|
13648
14321
|
},
|
|
13649
14322
|
// Action buttons
|
|
13650
14323
|
actionButtons: {
|
|
@@ -13653,7 +14326,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13653
14326
|
},
|
|
13654
14327
|
failButton: {
|
|
13655
14328
|
flex: 1,
|
|
13656
|
-
backgroundColor: "#
|
|
14329
|
+
backgroundColor: "#7f1d1d",
|
|
13657
14330
|
paddingVertical: 14,
|
|
13658
14331
|
borderRadius: 12,
|
|
13659
14332
|
alignItems: "center"
|
|
@@ -13661,7 +14334,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13661
14334
|
failButtonText: {
|
|
13662
14335
|
fontSize: 16,
|
|
13663
14336
|
fontWeight: "600",
|
|
13664
|
-
color: "#
|
|
14337
|
+
color: "#fca5a5"
|
|
13665
14338
|
},
|
|
13666
14339
|
passButton: {
|
|
13667
14340
|
flex: 1,
|
|
@@ -13683,22 +14356,22 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13683
14356
|
},
|
|
13684
14357
|
reportTypeButton: {
|
|
13685
14358
|
flex: 1,
|
|
13686
|
-
backgroundColor: "#
|
|
14359
|
+
backgroundColor: "#3f3f46",
|
|
13687
14360
|
paddingVertical: 10,
|
|
13688
14361
|
borderRadius: 8,
|
|
13689
14362
|
alignItems: "center"
|
|
13690
14363
|
},
|
|
13691
14364
|
reportTypeActive: {
|
|
13692
|
-
backgroundColor: "#
|
|
14365
|
+
backgroundColor: "#1e3a5f",
|
|
13693
14366
|
borderWidth: 2,
|
|
13694
|
-
borderColor: "#
|
|
14367
|
+
borderColor: "#3B82F6"
|
|
13695
14368
|
},
|
|
13696
14369
|
reportTypeText: {
|
|
13697
14370
|
fontSize: 14,
|
|
13698
|
-
color: "#
|
|
14371
|
+
color: "#a1a1aa"
|
|
13699
14372
|
},
|
|
13700
14373
|
reportTypeTextActive: {
|
|
13701
|
-
color: "#
|
|
14374
|
+
color: "#3B82F6",
|
|
13702
14375
|
fontWeight: "600"
|
|
13703
14376
|
},
|
|
13704
14377
|
severitySection: {
|
|
@@ -13707,7 +14380,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13707
14380
|
label: {
|
|
13708
14381
|
fontSize: 14,
|
|
13709
14382
|
fontWeight: "500",
|
|
13710
|
-
color: "#
|
|
14383
|
+
color: "#e4e4e7",
|
|
13711
14384
|
marginBottom: 8
|
|
13712
14385
|
},
|
|
13713
14386
|
severityButtons: {
|
|
@@ -13716,7 +14389,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13716
14389
|
},
|
|
13717
14390
|
severityButton: {
|
|
13718
14391
|
flex: 1,
|
|
13719
|
-
backgroundColor: "#
|
|
14392
|
+
backgroundColor: "#3f3f46",
|
|
13720
14393
|
paddingVertical: 8,
|
|
13721
14394
|
borderRadius: 6,
|
|
13722
14395
|
alignItems: "center"
|
|
@@ -13735,7 +14408,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13735
14408
|
},
|
|
13736
14409
|
severityText: {
|
|
13737
14410
|
fontSize: 12,
|
|
13738
|
-
color: "#
|
|
14411
|
+
color: "#a1a1aa",
|
|
13739
14412
|
textTransform: "capitalize"
|
|
13740
14413
|
},
|
|
13741
14414
|
severityTextActive: {
|
|
@@ -13746,17 +14419,17 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13746
14419
|
marginBottom: 16
|
|
13747
14420
|
},
|
|
13748
14421
|
textInput: {
|
|
13749
|
-
backgroundColor: "#
|
|
14422
|
+
backgroundColor: "#27272a",
|
|
13750
14423
|
borderWidth: 1,
|
|
13751
|
-
borderColor: "#
|
|
14424
|
+
borderColor: "#3f3f46",
|
|
13752
14425
|
borderRadius: 12,
|
|
13753
14426
|
padding: 12,
|
|
13754
14427
|
fontSize: 14,
|
|
13755
14428
|
minHeight: 100,
|
|
13756
|
-
color: "#
|
|
14429
|
+
color: "#fafafa"
|
|
13757
14430
|
},
|
|
13758
14431
|
submitButton: {
|
|
13759
|
-
backgroundColor: "#
|
|
14432
|
+
backgroundColor: "#3B82F6",
|
|
13760
14433
|
paddingVertical: 14,
|
|
13761
14434
|
borderRadius: 12,
|
|
13762
14435
|
alignItems: "center"
|
|
@@ -13795,16 +14468,16 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13795
14468
|
},
|
|
13796
14469
|
// Thread list styles
|
|
13797
14470
|
threadItem: {
|
|
13798
|
-
backgroundColor: "#
|
|
14471
|
+
backgroundColor: "#27272a",
|
|
13799
14472
|
borderRadius: 12,
|
|
13800
14473
|
padding: 12,
|
|
13801
14474
|
marginBottom: 8,
|
|
13802
14475
|
borderWidth: 1,
|
|
13803
|
-
borderColor: "#
|
|
14476
|
+
borderColor: "#3f3f46"
|
|
13804
14477
|
},
|
|
13805
14478
|
threadItemUnread: {
|
|
13806
|
-
backgroundColor: "#
|
|
13807
|
-
borderColor: "#
|
|
14479
|
+
backgroundColor: "#1e3a5f",
|
|
14480
|
+
borderColor: "#3B82F6"
|
|
13808
14481
|
},
|
|
13809
14482
|
threadHeader: {
|
|
13810
14483
|
flexDirection: "row",
|
|
@@ -13828,12 +14501,12 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13828
14501
|
threadSubject: {
|
|
13829
14502
|
fontSize: 14,
|
|
13830
14503
|
fontWeight: "500",
|
|
13831
|
-
color: "#
|
|
14504
|
+
color: "#e4e4e7",
|
|
13832
14505
|
flex: 1
|
|
13833
14506
|
},
|
|
13834
14507
|
threadSubjectUnread: {
|
|
13835
14508
|
fontWeight: "600",
|
|
13836
|
-
color: "#
|
|
14509
|
+
color: "#fafafa"
|
|
13837
14510
|
},
|
|
13838
14511
|
priorityDot: {
|
|
13839
14512
|
width: 8,
|
|
@@ -13843,7 +14516,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13843
14516
|
},
|
|
13844
14517
|
threadPreview: {
|
|
13845
14518
|
fontSize: 13,
|
|
13846
|
-
color: "#
|
|
14519
|
+
color: "#a1a1aa",
|
|
13847
14520
|
marginBottom: 4
|
|
13848
14521
|
},
|
|
13849
14522
|
threadMeta: {
|
|
@@ -13853,7 +14526,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13853
14526
|
},
|
|
13854
14527
|
threadMetaText: {
|
|
13855
14528
|
fontSize: 12,
|
|
13856
|
-
color: "#
|
|
14529
|
+
color: "#71717a"
|
|
13857
14530
|
},
|
|
13858
14531
|
unreadBadge: {
|
|
13859
14532
|
backgroundColor: "#3B82F6",
|
|
@@ -13868,7 +14541,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13868
14541
|
},
|
|
13869
14542
|
threadTime: {
|
|
13870
14543
|
fontSize: 12,
|
|
13871
|
-
color: "#
|
|
14544
|
+
color: "#71717a"
|
|
13872
14545
|
},
|
|
13873
14546
|
// Thread detail styles
|
|
13874
14547
|
threadDetailContainer: {
|
|
@@ -13877,7 +14550,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13877
14550
|
threadDetailHeader: {
|
|
13878
14551
|
flexDirection: "row",
|
|
13879
14552
|
alignItems: "center",
|
|
13880
|
-
backgroundColor: "#
|
|
14553
|
+
backgroundColor: "#27272a",
|
|
13881
14554
|
padding: 12,
|
|
13882
14555
|
borderRadius: 8,
|
|
13883
14556
|
marginBottom: 12
|
|
@@ -13890,7 +14563,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13890
14563
|
flex: 1,
|
|
13891
14564
|
fontSize: 15,
|
|
13892
14565
|
fontWeight: "600",
|
|
13893
|
-
color: "#
|
|
14566
|
+
color: "#fafafa"
|
|
13894
14567
|
},
|
|
13895
14568
|
loadingMessages: {
|
|
13896
14569
|
padding: 20,
|
|
@@ -13898,7 +14571,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13898
14571
|
},
|
|
13899
14572
|
loadingText: {
|
|
13900
14573
|
fontSize: 14,
|
|
13901
|
-
color: "#
|
|
14574
|
+
color: "#71717a"
|
|
13902
14575
|
},
|
|
13903
14576
|
messagesContainer: {
|
|
13904
14577
|
paddingBottom: 8
|
|
@@ -13911,26 +14584,26 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13911
14584
|
},
|
|
13912
14585
|
messageBubbleAdmin: {
|
|
13913
14586
|
alignSelf: "flex-start",
|
|
13914
|
-
backgroundColor: "#
|
|
14587
|
+
backgroundColor: "#27272a",
|
|
13915
14588
|
borderBottomLeftRadius: 4
|
|
13916
14589
|
},
|
|
13917
14590
|
messageBubbleTester: {
|
|
13918
14591
|
alignSelf: "flex-end",
|
|
13919
|
-
backgroundColor: "#
|
|
14592
|
+
backgroundColor: "#3B82F6",
|
|
13920
14593
|
borderBottomRightRadius: 4
|
|
13921
14594
|
},
|
|
13922
14595
|
messageSender: {
|
|
13923
14596
|
fontSize: 12,
|
|
13924
14597
|
fontWeight: "600",
|
|
13925
|
-
color: "#
|
|
14598
|
+
color: "#71717a",
|
|
13926
14599
|
marginBottom: 2
|
|
13927
14600
|
},
|
|
13928
14601
|
messageSenderTester: {
|
|
13929
|
-
color: "#
|
|
14602
|
+
color: "#93c5fd"
|
|
13930
14603
|
},
|
|
13931
14604
|
messageContent: {
|
|
13932
14605
|
fontSize: 14,
|
|
13933
|
-
color: "#
|
|
14606
|
+
color: "#fafafa",
|
|
13934
14607
|
lineHeight: 20
|
|
13935
14608
|
},
|
|
13936
14609
|
messageContentTester: {
|
|
@@ -13938,12 +14611,12 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13938
14611
|
},
|
|
13939
14612
|
messageTime: {
|
|
13940
14613
|
fontSize: 11,
|
|
13941
|
-
color: "#
|
|
14614
|
+
color: "#71717a",
|
|
13942
14615
|
marginTop: 4,
|
|
13943
14616
|
textAlign: "right"
|
|
13944
14617
|
},
|
|
13945
14618
|
messageTimeTester: {
|
|
13946
|
-
color: "#
|
|
14619
|
+
color: "#93c5fd"
|
|
13947
14620
|
},
|
|
13948
14621
|
// Reply composer styles
|
|
13949
14622
|
replyComposer: {
|
|
@@ -13951,24 +14624,24 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13951
14624
|
alignItems: "flex-end",
|
|
13952
14625
|
padding: 12,
|
|
13953
14626
|
borderTopWidth: 1,
|
|
13954
|
-
borderTopColor: "#
|
|
13955
|
-
backgroundColor: "#
|
|
14627
|
+
borderTopColor: "#27272a",
|
|
14628
|
+
backgroundColor: "#18181b"
|
|
13956
14629
|
},
|
|
13957
14630
|
replyInput: {
|
|
13958
14631
|
flex: 1,
|
|
13959
|
-
backgroundColor: "#
|
|
14632
|
+
backgroundColor: "#27272a",
|
|
13960
14633
|
borderWidth: 1,
|
|
13961
|
-
borderColor: "#
|
|
14634
|
+
borderColor: "#3f3f46",
|
|
13962
14635
|
borderRadius: 20,
|
|
13963
14636
|
paddingHorizontal: 16,
|
|
13964
14637
|
paddingVertical: 10,
|
|
13965
14638
|
fontSize: 14,
|
|
13966
|
-
color: "#
|
|
14639
|
+
color: "#fafafa",
|
|
13967
14640
|
maxHeight: 100,
|
|
13968
14641
|
marginRight: 8
|
|
13969
14642
|
},
|
|
13970
14643
|
sendButton: {
|
|
13971
|
-
backgroundColor: "#
|
|
14644
|
+
backgroundColor: "#3B82F6",
|
|
13972
14645
|
paddingHorizontal: 16,
|
|
13973
14646
|
paddingVertical: 10,
|
|
13974
14647
|
borderRadius: 20,
|
|
@@ -13976,7 +14649,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13976
14649
|
alignItems: "center"
|
|
13977
14650
|
},
|
|
13978
14651
|
sendButtonDisabled: {
|
|
13979
|
-
backgroundColor: "#
|
|
14652
|
+
backgroundColor: "#1e40af"
|
|
13980
14653
|
},
|
|
13981
14654
|
sendButtonText: {
|
|
13982
14655
|
fontSize: 14,
|
|
@@ -13988,7 +14661,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
13988
14661
|
flexDirection: "row",
|
|
13989
14662
|
alignItems: "center",
|
|
13990
14663
|
justifyContent: "center",
|
|
13991
|
-
backgroundColor: "#
|
|
14664
|
+
backgroundColor: "#3B82F6",
|
|
13992
14665
|
paddingVertical: 12,
|
|
13993
14666
|
paddingHorizontal: 20,
|
|
13994
14667
|
borderRadius: 12,
|
|
@@ -14010,48 +14683,50 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14010
14683
|
composeTitle: {
|
|
14011
14684
|
fontSize: 20,
|
|
14012
14685
|
fontWeight: "600",
|
|
14013
|
-
color: "#
|
|
14686
|
+
color: "#fafafa",
|
|
14014
14687
|
marginBottom: 4
|
|
14015
14688
|
},
|
|
14016
14689
|
composeSubtitle: {
|
|
14017
14690
|
fontSize: 14,
|
|
14018
|
-
color: "#
|
|
14691
|
+
color: "#71717a"
|
|
14019
14692
|
},
|
|
14020
14693
|
composeForm: {
|
|
14021
|
-
backgroundColor: "#
|
|
14694
|
+
backgroundColor: "#27272a",
|
|
14022
14695
|
borderRadius: 12,
|
|
14023
|
-
padding: 16
|
|
14696
|
+
padding: 16,
|
|
14697
|
+
borderWidth: 1,
|
|
14698
|
+
borderColor: "#3f3f46"
|
|
14024
14699
|
},
|
|
14025
14700
|
composeSubjectInput: {
|
|
14026
|
-
backgroundColor: "#
|
|
14701
|
+
backgroundColor: "#18181b",
|
|
14027
14702
|
borderWidth: 1,
|
|
14028
|
-
borderColor: "#
|
|
14703
|
+
borderColor: "#3f3f46",
|
|
14029
14704
|
borderRadius: 8,
|
|
14030
14705
|
paddingHorizontal: 12,
|
|
14031
14706
|
paddingVertical: 10,
|
|
14032
14707
|
fontSize: 15,
|
|
14033
|
-
color: "#
|
|
14708
|
+
color: "#fafafa"
|
|
14034
14709
|
},
|
|
14035
14710
|
composeMessageInput: {
|
|
14036
|
-
backgroundColor: "#
|
|
14711
|
+
backgroundColor: "#18181b",
|
|
14037
14712
|
borderWidth: 1,
|
|
14038
|
-
borderColor: "#
|
|
14713
|
+
borderColor: "#3f3f46",
|
|
14039
14714
|
borderRadius: 8,
|
|
14040
14715
|
paddingHorizontal: 12,
|
|
14041
14716
|
paddingVertical: 10,
|
|
14042
14717
|
fontSize: 15,
|
|
14043
|
-
color: "#
|
|
14718
|
+
color: "#fafafa",
|
|
14044
14719
|
minHeight: 120
|
|
14045
14720
|
},
|
|
14046
14721
|
composeSendButton: {
|
|
14047
|
-
backgroundColor: "#
|
|
14722
|
+
backgroundColor: "#3B82F6",
|
|
14048
14723
|
paddingVertical: 14,
|
|
14049
14724
|
borderRadius: 12,
|
|
14050
14725
|
alignItems: "center",
|
|
14051
14726
|
marginTop: 20
|
|
14052
14727
|
},
|
|
14053
14728
|
composeSendButtonDisabled: {
|
|
14054
|
-
backgroundColor: "#
|
|
14729
|
+
backgroundColor: "#1e40af"
|
|
14055
14730
|
},
|
|
14056
14731
|
composeSendButtonText: {
|
|
14057
14732
|
fontSize: 16,
|
|
@@ -14060,17 +14735,19 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14060
14735
|
},
|
|
14061
14736
|
// Profile styles
|
|
14062
14737
|
profileCard: {
|
|
14063
|
-
backgroundColor: "#
|
|
14738
|
+
backgroundColor: "#27272a",
|
|
14064
14739
|
borderRadius: 16,
|
|
14065
14740
|
padding: 24,
|
|
14066
14741
|
alignItems: "center",
|
|
14067
|
-
marginBottom: 16
|
|
14742
|
+
marginBottom: 16,
|
|
14743
|
+
borderWidth: 1,
|
|
14744
|
+
borderColor: "#3f3f46"
|
|
14068
14745
|
},
|
|
14069
14746
|
avatarCircle: {
|
|
14070
14747
|
width: 72,
|
|
14071
14748
|
height: 72,
|
|
14072
14749
|
borderRadius: 36,
|
|
14073
|
-
backgroundColor: "#
|
|
14750
|
+
backgroundColor: "#3B82F6",
|
|
14074
14751
|
justifyContent: "center",
|
|
14075
14752
|
alignItems: "center",
|
|
14076
14753
|
marginBottom: 12
|
|
@@ -14083,12 +14760,12 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14083
14760
|
profileName: {
|
|
14084
14761
|
fontSize: 20,
|
|
14085
14762
|
fontWeight: "600",
|
|
14086
|
-
color: "#
|
|
14763
|
+
color: "#fafafa",
|
|
14087
14764
|
marginBottom: 4
|
|
14088
14765
|
},
|
|
14089
14766
|
profileEmail: {
|
|
14090
14767
|
fontSize: 14,
|
|
14091
|
-
color: "#
|
|
14768
|
+
color: "#71717a",
|
|
14092
14769
|
marginBottom: 16
|
|
14093
14770
|
},
|
|
14094
14771
|
profileStats: {
|
|
@@ -14102,35 +14779,37 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14102
14779
|
profileStatValue: {
|
|
14103
14780
|
fontSize: 24,
|
|
14104
14781
|
fontWeight: "700",
|
|
14105
|
-
color: "#
|
|
14782
|
+
color: "#3B82F6"
|
|
14106
14783
|
},
|
|
14107
14784
|
profileStatLabel: {
|
|
14108
14785
|
fontSize: 12,
|
|
14109
|
-
color: "#
|
|
14786
|
+
color: "#71717a",
|
|
14110
14787
|
marginTop: 2
|
|
14111
14788
|
},
|
|
14112
14789
|
profileStatDivider: {
|
|
14113
14790
|
width: 1,
|
|
14114
14791
|
height: 32,
|
|
14115
|
-
backgroundColor: "#
|
|
14792
|
+
backgroundColor: "#3f3f46"
|
|
14116
14793
|
},
|
|
14117
14794
|
profileInfoSection: {
|
|
14118
|
-
backgroundColor: "#
|
|
14795
|
+
backgroundColor: "#27272a",
|
|
14119
14796
|
borderRadius: 12,
|
|
14120
14797
|
padding: 16,
|
|
14121
|
-
marginBottom: 12
|
|
14798
|
+
marginBottom: 12,
|
|
14799
|
+
borderWidth: 1,
|
|
14800
|
+
borderColor: "#3f3f46"
|
|
14122
14801
|
},
|
|
14123
14802
|
profileInfoLabel: {
|
|
14124
14803
|
fontSize: 12,
|
|
14125
14804
|
fontWeight: "600",
|
|
14126
|
-
color: "#
|
|
14805
|
+
color: "#71717a",
|
|
14127
14806
|
marginBottom: 8,
|
|
14128
14807
|
textTransform: "uppercase",
|
|
14129
14808
|
letterSpacing: 0.5
|
|
14130
14809
|
},
|
|
14131
14810
|
profileInfoValue: {
|
|
14132
14811
|
fontSize: 14,
|
|
14133
|
-
color: "#
|
|
14812
|
+
color: "#e4e4e7",
|
|
14134
14813
|
marginBottom: 4
|
|
14135
14814
|
},
|
|
14136
14815
|
platformTags: {
|
|
@@ -14139,18 +14818,18 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14139
14818
|
gap: 8
|
|
14140
14819
|
},
|
|
14141
14820
|
platformTag: {
|
|
14142
|
-
backgroundColor: "#
|
|
14821
|
+
backgroundColor: "#1e3a5f",
|
|
14143
14822
|
paddingHorizontal: 12,
|
|
14144
14823
|
paddingVertical: 6,
|
|
14145
14824
|
borderRadius: 16
|
|
14146
14825
|
},
|
|
14147
14826
|
platformTagText: {
|
|
14148
14827
|
fontSize: 13,
|
|
14149
|
-
color: "#
|
|
14828
|
+
color: "#60a5fa",
|
|
14150
14829
|
fontWeight: "500"
|
|
14151
14830
|
},
|
|
14152
14831
|
editProfileButton: {
|
|
14153
|
-
backgroundColor: "#
|
|
14832
|
+
backgroundColor: "#3B82F6",
|
|
14154
14833
|
paddingVertical: 14,
|
|
14155
14834
|
borderRadius: 12,
|
|
14156
14835
|
alignItems: "center",
|
|
@@ -14171,48 +14850,48 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14171
14850
|
profileEditTitle: {
|
|
14172
14851
|
fontSize: 20,
|
|
14173
14852
|
fontWeight: "600",
|
|
14174
|
-
color: "#
|
|
14853
|
+
color: "#fafafa"
|
|
14175
14854
|
},
|
|
14176
14855
|
cancelText: {
|
|
14177
14856
|
fontSize: 14,
|
|
14178
|
-
color: "#
|
|
14857
|
+
color: "#71717a"
|
|
14179
14858
|
},
|
|
14180
14859
|
profileSection: {
|
|
14181
14860
|
marginBottom: 20
|
|
14182
14861
|
},
|
|
14183
14862
|
profileInput: {
|
|
14184
|
-
backgroundColor: "#
|
|
14863
|
+
backgroundColor: "#27272a",
|
|
14185
14864
|
borderWidth: 1,
|
|
14186
|
-
borderColor: "#
|
|
14865
|
+
borderColor: "#3f3f46",
|
|
14187
14866
|
borderRadius: 10,
|
|
14188
14867
|
paddingHorizontal: 14,
|
|
14189
14868
|
paddingVertical: 12,
|
|
14190
14869
|
fontSize: 15,
|
|
14191
|
-
color: "#
|
|
14870
|
+
color: "#fafafa"
|
|
14192
14871
|
},
|
|
14193
14872
|
profileReadOnly: {
|
|
14194
|
-
backgroundColor: "#
|
|
14873
|
+
backgroundColor: "#27272a",
|
|
14195
14874
|
borderRadius: 10,
|
|
14196
14875
|
padding: 14
|
|
14197
14876
|
},
|
|
14198
14877
|
profileReadOnlyText: {
|
|
14199
14878
|
fontSize: 15,
|
|
14200
|
-
color: "#
|
|
14879
|
+
color: "#a1a1aa"
|
|
14201
14880
|
},
|
|
14202
14881
|
profileReadOnlyHint: {
|
|
14203
14882
|
fontSize: 12,
|
|
14204
|
-
color: "#
|
|
14883
|
+
color: "#52525b",
|
|
14205
14884
|
marginTop: 4
|
|
14206
14885
|
},
|
|
14207
14886
|
profileHint: {
|
|
14208
14887
|
fontSize: 13,
|
|
14209
|
-
color: "#
|
|
14888
|
+
color: "#71717a",
|
|
14210
14889
|
marginBottom: 12
|
|
14211
14890
|
},
|
|
14212
14891
|
emailChip: {
|
|
14213
14892
|
flexDirection: "row",
|
|
14214
14893
|
alignItems: "center",
|
|
14215
|
-
backgroundColor: "#
|
|
14894
|
+
backgroundColor: "#1e3a5f",
|
|
14216
14895
|
paddingHorizontal: 12,
|
|
14217
14896
|
paddingVertical: 8,
|
|
14218
14897
|
borderRadius: 20,
|
|
@@ -14221,11 +14900,11 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14221
14900
|
emailChipText: {
|
|
14222
14901
|
flex: 1,
|
|
14223
14902
|
fontSize: 14,
|
|
14224
|
-
color: "#
|
|
14903
|
+
color: "#60a5fa"
|
|
14225
14904
|
},
|
|
14226
14905
|
emailChipRemove: {
|
|
14227
14906
|
fontSize: 14,
|
|
14228
|
-
color: "#
|
|
14907
|
+
color: "#93c5fd",
|
|
14229
14908
|
fontWeight: "600",
|
|
14230
14909
|
marginLeft: 8
|
|
14231
14910
|
},
|
|
@@ -14235,23 +14914,23 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14235
14914
|
},
|
|
14236
14915
|
addEmailInput: {
|
|
14237
14916
|
flex: 1,
|
|
14238
|
-
backgroundColor: "#
|
|
14917
|
+
backgroundColor: "#27272a",
|
|
14239
14918
|
borderWidth: 1,
|
|
14240
|
-
borderColor: "#
|
|
14919
|
+
borderColor: "#3f3f46",
|
|
14241
14920
|
borderRadius: 10,
|
|
14242
14921
|
paddingHorizontal: 14,
|
|
14243
14922
|
paddingVertical: 10,
|
|
14244
14923
|
fontSize: 14,
|
|
14245
|
-
color: "#
|
|
14924
|
+
color: "#fafafa"
|
|
14246
14925
|
},
|
|
14247
14926
|
addEmailButton: {
|
|
14248
|
-
backgroundColor: "#
|
|
14927
|
+
backgroundColor: "#3B82F6",
|
|
14249
14928
|
paddingHorizontal: 16,
|
|
14250
14929
|
borderRadius: 10,
|
|
14251
14930
|
justifyContent: "center"
|
|
14252
14931
|
},
|
|
14253
14932
|
addEmailButtonDisabled: {
|
|
14254
|
-
backgroundColor: "#
|
|
14933
|
+
backgroundColor: "#1e40af"
|
|
14255
14934
|
},
|
|
14256
14935
|
addEmailButtonText: {
|
|
14257
14936
|
fontSize: 14,
|
|
@@ -14264,7 +14943,7 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14264
14943
|
},
|
|
14265
14944
|
platformButton: {
|
|
14266
14945
|
flex: 1,
|
|
14267
|
-
backgroundColor: "#
|
|
14946
|
+
backgroundColor: "#3f3f46",
|
|
14268
14947
|
paddingVertical: 12,
|
|
14269
14948
|
borderRadius: 10,
|
|
14270
14949
|
alignItems: "center",
|
|
@@ -14272,16 +14951,16 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14272
14951
|
borderColor: "transparent"
|
|
14273
14952
|
},
|
|
14274
14953
|
platformButtonActive: {
|
|
14275
|
-
backgroundColor: "#
|
|
14276
|
-
borderColor: "#
|
|
14954
|
+
backgroundColor: "#1e3a5f",
|
|
14955
|
+
borderColor: "#3B82F6"
|
|
14277
14956
|
},
|
|
14278
14957
|
platformButtonText: {
|
|
14279
14958
|
fontSize: 13,
|
|
14280
|
-
color: "#
|
|
14959
|
+
color: "#a1a1aa",
|
|
14281
14960
|
fontWeight: "500"
|
|
14282
14961
|
},
|
|
14283
14962
|
platformButtonTextActive: {
|
|
14284
|
-
color: "#
|
|
14963
|
+
color: "#3B82F6"
|
|
14285
14964
|
},
|
|
14286
14965
|
saveProfileButton: {
|
|
14287
14966
|
backgroundColor: "#16A34A",
|
|
@@ -14297,6 +14976,35 @@ var styles = import_react_native2.StyleSheet.create({
|
|
|
14297
14976
|
fontSize: 16,
|
|
14298
14977
|
fontWeight: "600",
|
|
14299
14978
|
color: "#fff"
|
|
14979
|
+
},
|
|
14980
|
+
// Profile overlay styles
|
|
14981
|
+
profileOverlay: {
|
|
14982
|
+
position: "absolute",
|
|
14983
|
+
top: 0,
|
|
14984
|
+
left: 0,
|
|
14985
|
+
right: 0,
|
|
14986
|
+
bottom: 0,
|
|
14987
|
+
backgroundColor: "#18181b",
|
|
14988
|
+
zIndex: 100
|
|
14989
|
+
},
|
|
14990
|
+
profileOverlayContent: {
|
|
14991
|
+
flex: 1,
|
|
14992
|
+
padding: 16
|
|
14993
|
+
},
|
|
14994
|
+
profileOverlayFooter: {
|
|
14995
|
+
borderTopWidth: 1,
|
|
14996
|
+
borderTopColor: "#27272a",
|
|
14997
|
+
padding: 12,
|
|
14998
|
+
backgroundColor: "#09090b"
|
|
14999
|
+
},
|
|
15000
|
+
closeProfileButton: {
|
|
15001
|
+
paddingVertical: 8,
|
|
15002
|
+
alignItems: "center"
|
|
15003
|
+
},
|
|
15004
|
+
closeProfileButtonText: {
|
|
15005
|
+
fontSize: 14,
|
|
15006
|
+
fontWeight: "500",
|
|
15007
|
+
color: "#3B82F6"
|
|
14300
15008
|
}
|
|
14301
15009
|
});
|
|
14302
15010
|
// Annotate the CommonJS export names for ESM import in node:
|