@bbearai/react-native 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +843 -191
- package/dist/index.mjs +843 -191
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -11411,7 +11411,16 @@ var BugBearClient = class {
|
|
|
11411
11411
|
*/
|
|
11412
11412
|
async submitReport(report) {
|
|
11413
11413
|
try {
|
|
11414
|
+
const validationError = this.validateReport(report);
|
|
11415
|
+
if (validationError) {
|
|
11416
|
+
return { success: false, error: validationError };
|
|
11417
|
+
}
|
|
11414
11418
|
const userInfo = await this.getCurrentUserInfo();
|
|
11419
|
+
const rateLimitId = userInfo?.email || this.config.projectId;
|
|
11420
|
+
const rateLimit = await this.checkRateLimit(rateLimitId, "report_submit");
|
|
11421
|
+
if (!rateLimit.allowed) {
|
|
11422
|
+
return { success: false, error: rateLimit.error };
|
|
11423
|
+
}
|
|
11415
11424
|
if (!userInfo) {
|
|
11416
11425
|
console.error("BugBear: No user info available, cannot submit report");
|
|
11417
11426
|
return { success: false, error: "User not authenticated" };
|
|
@@ -11462,6 +11471,7 @@ var BugBearClient = class {
|
|
|
11462
11471
|
const { data, error } = await this.supabase.from("test_assignments").select(`
|
|
11463
11472
|
id,
|
|
11464
11473
|
status,
|
|
11474
|
+
started_at,
|
|
11465
11475
|
test_case:test_cases(
|
|
11466
11476
|
id,
|
|
11467
11477
|
title,
|
|
@@ -11489,6 +11499,7 @@ var BugBearClient = class {
|
|
|
11489
11499
|
return (data || []).map((item) => ({
|
|
11490
11500
|
id: item.id,
|
|
11491
11501
|
status: item.status,
|
|
11502
|
+
startedAt: item.started_at,
|
|
11492
11503
|
testCase: {
|
|
11493
11504
|
id: item.test_case.id,
|
|
11494
11505
|
title: item.test_case.title,
|
|
@@ -11514,47 +11525,430 @@ var BugBearClient = class {
|
|
|
11514
11525
|
return [];
|
|
11515
11526
|
}
|
|
11516
11527
|
}
|
|
11528
|
+
/**
|
|
11529
|
+
* Get assignment by ID with time tracking fields
|
|
11530
|
+
*/
|
|
11531
|
+
async getAssignment(assignmentId) {
|
|
11532
|
+
try {
|
|
11533
|
+
const { data, error } = await this.supabase.from("test_assignments").select(`
|
|
11534
|
+
id,
|
|
11535
|
+
status,
|
|
11536
|
+
started_at,
|
|
11537
|
+
completed_at,
|
|
11538
|
+
duration_seconds,
|
|
11539
|
+
test_case:test_cases(
|
|
11540
|
+
id,
|
|
11541
|
+
title,
|
|
11542
|
+
test_key,
|
|
11543
|
+
description,
|
|
11544
|
+
steps,
|
|
11545
|
+
expected_result,
|
|
11546
|
+
priority,
|
|
11547
|
+
target_route,
|
|
11548
|
+
track:qa_tracks(
|
|
11549
|
+
id,
|
|
11550
|
+
name,
|
|
11551
|
+
icon,
|
|
11552
|
+
color,
|
|
11553
|
+
test_template,
|
|
11554
|
+
rubric_mode,
|
|
11555
|
+
description
|
|
11556
|
+
)
|
|
11557
|
+
)
|
|
11558
|
+
`).eq("id", assignmentId).single();
|
|
11559
|
+
if (error || !data) return null;
|
|
11560
|
+
const testCase = data.test_case;
|
|
11561
|
+
if (!testCase) {
|
|
11562
|
+
console.error("BugBear: Assignment returned without test_case");
|
|
11563
|
+
return null;
|
|
11564
|
+
}
|
|
11565
|
+
const track = testCase.track;
|
|
11566
|
+
return {
|
|
11567
|
+
id: data.id,
|
|
11568
|
+
status: data.status,
|
|
11569
|
+
startedAt: data.started_at,
|
|
11570
|
+
durationSeconds: data.duration_seconds,
|
|
11571
|
+
testCase: {
|
|
11572
|
+
id: testCase.id,
|
|
11573
|
+
title: testCase.title,
|
|
11574
|
+
testKey: testCase.test_key,
|
|
11575
|
+
description: testCase.description,
|
|
11576
|
+
steps: testCase.steps,
|
|
11577
|
+
expectedResult: testCase.expected_result,
|
|
11578
|
+
priority: testCase.priority,
|
|
11579
|
+
targetRoute: testCase.target_route,
|
|
11580
|
+
track: track ? {
|
|
11581
|
+
id: track.id,
|
|
11582
|
+
name: track.name,
|
|
11583
|
+
icon: track.icon,
|
|
11584
|
+
color: track.color,
|
|
11585
|
+
testTemplate: track.test_template,
|
|
11586
|
+
rubricMode: track.rubric_mode || "pass_fail",
|
|
11587
|
+
description: track.description
|
|
11588
|
+
} : void 0
|
|
11589
|
+
}
|
|
11590
|
+
};
|
|
11591
|
+
} catch (err) {
|
|
11592
|
+
console.error("BugBear: Error fetching assignment", err);
|
|
11593
|
+
return null;
|
|
11594
|
+
}
|
|
11595
|
+
}
|
|
11596
|
+
/**
|
|
11597
|
+
* Update assignment status with automatic time tracking
|
|
11598
|
+
* - Sets started_at when status changes to 'in_progress'
|
|
11599
|
+
* - Calculates duration_seconds when status changes to 'passed'/'failed'/'blocked'
|
|
11600
|
+
* - Optionally include feedback when completing a test
|
|
11601
|
+
*/
|
|
11602
|
+
async updateAssignmentStatus(assignmentId, status, options) {
|
|
11603
|
+
try {
|
|
11604
|
+
const { data: currentAssignment, error: fetchError } = await this.supabase.from("test_assignments").select("status, started_at").eq("id", assignmentId).single();
|
|
11605
|
+
if (fetchError || !currentAssignment) {
|
|
11606
|
+
return { success: false, error: "Assignment not found" };
|
|
11607
|
+
}
|
|
11608
|
+
const updateData = { status };
|
|
11609
|
+
let durationSeconds;
|
|
11610
|
+
if (status === "in_progress" && currentAssignment.status !== "in_progress") {
|
|
11611
|
+
updateData.started_at = (/* @__PURE__ */ new Date()).toISOString();
|
|
11612
|
+
}
|
|
11613
|
+
if (["passed", "failed", "blocked"].includes(status)) {
|
|
11614
|
+
updateData.completed_at = (/* @__PURE__ */ new Date()).toISOString();
|
|
11615
|
+
if (currentAssignment.started_at) {
|
|
11616
|
+
const startedAt = new Date(currentAssignment.started_at);
|
|
11617
|
+
const completedAt = /* @__PURE__ */ new Date();
|
|
11618
|
+
durationSeconds = Math.round((completedAt.getTime() - startedAt.getTime()) / 1e3);
|
|
11619
|
+
updateData.duration_seconds = durationSeconds;
|
|
11620
|
+
}
|
|
11621
|
+
}
|
|
11622
|
+
if (options?.notes) {
|
|
11623
|
+
updateData.notes = options.notes;
|
|
11624
|
+
}
|
|
11625
|
+
if (options?.testResult) {
|
|
11626
|
+
updateData.test_result = options.testResult;
|
|
11627
|
+
}
|
|
11628
|
+
const { error } = await this.supabase.from("test_assignments").update(updateData).eq("id", assignmentId);
|
|
11629
|
+
if (error) {
|
|
11630
|
+
console.error("BugBear: Failed to update assignment status", error);
|
|
11631
|
+
return { success: false, error: error.message };
|
|
11632
|
+
}
|
|
11633
|
+
if (options?.feedback && ["passed", "failed", "blocked"].includes(status)) {
|
|
11634
|
+
const { data: assignmentData, error: fetchError2 } = await this.supabase.from("test_assignments").select("test_case_id").eq("id", assignmentId).single();
|
|
11635
|
+
if (fetchError2) {
|
|
11636
|
+
console.error("BugBear: Failed to fetch assignment for feedback", fetchError2);
|
|
11637
|
+
} else if (assignmentData?.test_case_id) {
|
|
11638
|
+
const feedbackResult = await this.submitTestFeedback({
|
|
11639
|
+
testCaseId: assignmentData.test_case_id,
|
|
11640
|
+
assignmentId,
|
|
11641
|
+
feedback: options.feedback,
|
|
11642
|
+
timeToCompleteSeconds: durationSeconds
|
|
11643
|
+
});
|
|
11644
|
+
if (!feedbackResult.success) {
|
|
11645
|
+
console.error("BugBear: Failed to submit feedback", feedbackResult.error);
|
|
11646
|
+
}
|
|
11647
|
+
}
|
|
11648
|
+
}
|
|
11649
|
+
return { success: true, durationSeconds };
|
|
11650
|
+
} catch (err) {
|
|
11651
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
11652
|
+
console.error("BugBear: Error updating assignment status", err);
|
|
11653
|
+
return { success: false, error: message };
|
|
11654
|
+
}
|
|
11655
|
+
}
|
|
11656
|
+
/**
|
|
11657
|
+
* Submit feedback on a test case to help improve test quality
|
|
11658
|
+
* This empowers testers to shape better tests over time
|
|
11659
|
+
*/
|
|
11660
|
+
async submitTestFeedback(options) {
|
|
11661
|
+
try {
|
|
11662
|
+
const testerInfo = await this.getTesterInfo();
|
|
11663
|
+
if (!testerInfo) {
|
|
11664
|
+
return { success: false, error: "Not authenticated as tester" };
|
|
11665
|
+
}
|
|
11666
|
+
const { testCaseId, assignmentId, feedback, timeToCompleteSeconds } = options;
|
|
11667
|
+
if (feedback.rating < 1 || feedback.rating > 5) {
|
|
11668
|
+
return { success: false, error: "Rating must be between 1 and 5" };
|
|
11669
|
+
}
|
|
11670
|
+
const { error: feedbackError } = await this.supabase.from("test_feedback").insert({
|
|
11671
|
+
project_id: this.config.projectId,
|
|
11672
|
+
test_case_id: testCaseId,
|
|
11673
|
+
assignment_id: assignmentId || null,
|
|
11674
|
+
tester_id: testerInfo.id,
|
|
11675
|
+
rating: feedback.rating,
|
|
11676
|
+
clarity_rating: feedback.clarityRating || null,
|
|
11677
|
+
steps_rating: feedback.stepsRating || null,
|
|
11678
|
+
relevance_rating: feedback.relevanceRating || null,
|
|
11679
|
+
feedback_note: feedback.feedbackNote?.trim() || null,
|
|
11680
|
+
suggested_improvement: feedback.suggestedImprovement?.trim() || null,
|
|
11681
|
+
is_outdated: feedback.isOutdated || false,
|
|
11682
|
+
needs_more_detail: feedback.needsMoreDetail || false,
|
|
11683
|
+
steps_unclear: feedback.stepsUnclear || false,
|
|
11684
|
+
expected_result_unclear: feedback.expectedResultUnclear || false,
|
|
11685
|
+
platform: this.getDeviceInfo().platform,
|
|
11686
|
+
time_to_complete_seconds: timeToCompleteSeconds || null
|
|
11687
|
+
});
|
|
11688
|
+
if (feedbackError) {
|
|
11689
|
+
console.error("BugBear: Failed to submit feedback", feedbackError);
|
|
11690
|
+
return { success: false, error: feedbackError.message };
|
|
11691
|
+
}
|
|
11692
|
+
if (assignmentId) {
|
|
11693
|
+
const { error: assignmentError } = await this.supabase.from("test_assignments").update({
|
|
11694
|
+
feedback_rating: feedback.rating,
|
|
11695
|
+
feedback_note: feedback.feedbackNote?.trim() || null,
|
|
11696
|
+
feedback_submitted_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
11697
|
+
}).eq("id", assignmentId);
|
|
11698
|
+
if (assignmentError) {
|
|
11699
|
+
console.error("BugBear: Failed to update assignment feedback fields", assignmentError);
|
|
11700
|
+
}
|
|
11701
|
+
}
|
|
11702
|
+
return { success: true };
|
|
11703
|
+
} catch (err) {
|
|
11704
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
11705
|
+
console.error("BugBear: Error submitting feedback", err);
|
|
11706
|
+
return { success: false, error: message };
|
|
11707
|
+
}
|
|
11708
|
+
}
|
|
11709
|
+
/**
|
|
11710
|
+
* Get the currently active (in_progress) assignment for the tester
|
|
11711
|
+
*/
|
|
11712
|
+
async getActiveAssignment() {
|
|
11713
|
+
try {
|
|
11714
|
+
const testerInfo = await this.getTesterInfo();
|
|
11715
|
+
if (!testerInfo) return null;
|
|
11716
|
+
const { data, error } = await this.supabase.from("test_assignments").select(`
|
|
11717
|
+
id,
|
|
11718
|
+
status,
|
|
11719
|
+
started_at,
|
|
11720
|
+
test_case:test_cases(
|
|
11721
|
+
id,
|
|
11722
|
+
title,
|
|
11723
|
+
test_key,
|
|
11724
|
+
description,
|
|
11725
|
+
steps,
|
|
11726
|
+
expected_result,
|
|
11727
|
+
priority,
|
|
11728
|
+
target_route,
|
|
11729
|
+
track:qa_tracks(
|
|
11730
|
+
id,
|
|
11731
|
+
name,
|
|
11732
|
+
icon,
|
|
11733
|
+
color,
|
|
11734
|
+
test_template,
|
|
11735
|
+
rubric_mode,
|
|
11736
|
+
description
|
|
11737
|
+
)
|
|
11738
|
+
)
|
|
11739
|
+
`).eq("project_id", this.config.projectId).eq("tester_id", testerInfo.id).eq("status", "in_progress").order("started_at", { ascending: false }).limit(1).maybeSingle();
|
|
11740
|
+
if (error || !data) return null;
|
|
11741
|
+
const testCase = data.test_case;
|
|
11742
|
+
if (!testCase) {
|
|
11743
|
+
console.error("BugBear: Active assignment returned without test_case");
|
|
11744
|
+
return null;
|
|
11745
|
+
}
|
|
11746
|
+
const track = testCase.track;
|
|
11747
|
+
return {
|
|
11748
|
+
id: data.id,
|
|
11749
|
+
status: data.status,
|
|
11750
|
+
startedAt: data.started_at,
|
|
11751
|
+
testCase: {
|
|
11752
|
+
id: testCase.id,
|
|
11753
|
+
title: testCase.title,
|
|
11754
|
+
testKey: testCase.test_key,
|
|
11755
|
+
description: testCase.description,
|
|
11756
|
+
steps: testCase.steps,
|
|
11757
|
+
expectedResult: testCase.expected_result,
|
|
11758
|
+
priority: testCase.priority,
|
|
11759
|
+
targetRoute: testCase.target_route,
|
|
11760
|
+
track: track ? {
|
|
11761
|
+
id: track.id,
|
|
11762
|
+
name: track.name,
|
|
11763
|
+
icon: track.icon,
|
|
11764
|
+
color: track.color,
|
|
11765
|
+
testTemplate: track.test_template,
|
|
11766
|
+
rubricMode: track.rubric_mode || "pass_fail",
|
|
11767
|
+
description: track.description
|
|
11768
|
+
} : void 0
|
|
11769
|
+
}
|
|
11770
|
+
};
|
|
11771
|
+
} catch (err) {
|
|
11772
|
+
console.error("BugBear: Error fetching active assignment", err);
|
|
11773
|
+
return null;
|
|
11774
|
+
}
|
|
11775
|
+
}
|
|
11517
11776
|
/**
|
|
11518
11777
|
* Get current tester info
|
|
11519
11778
|
* Looks up tester by email from the host app's authenticated user
|
|
11779
|
+
* Checks both primary email AND additional_emails array
|
|
11780
|
+
* Uses parameterized RPC function to prevent SQL injection
|
|
11520
11781
|
*/
|
|
11521
11782
|
async getTesterInfo() {
|
|
11522
11783
|
try {
|
|
11523
11784
|
const userInfo = await this.getCurrentUserInfo();
|
|
11524
|
-
if (!userInfo) return null;
|
|
11525
|
-
|
|
11785
|
+
if (!userInfo?.email) return null;
|
|
11786
|
+
if (!this.isValidEmail(userInfo.email)) {
|
|
11787
|
+
console.warn("BugBear: Invalid email format");
|
|
11788
|
+
return null;
|
|
11789
|
+
}
|
|
11790
|
+
const { data, error } = await this.supabase.rpc("lookup_tester_by_email", {
|
|
11791
|
+
p_project_id: this.config.projectId,
|
|
11792
|
+
p_email: userInfo.email
|
|
11793
|
+
}).maybeSingle();
|
|
11526
11794
|
if (error || !data) return null;
|
|
11795
|
+
const tester = data;
|
|
11527
11796
|
return {
|
|
11528
|
-
id:
|
|
11529
|
-
name:
|
|
11530
|
-
email:
|
|
11531
|
-
additionalEmails:
|
|
11532
|
-
avatarUrl:
|
|
11533
|
-
platforms:
|
|
11534
|
-
assignedTests:
|
|
11535
|
-
completedTests:
|
|
11797
|
+
id: tester.id,
|
|
11798
|
+
name: tester.name,
|
|
11799
|
+
email: tester.email,
|
|
11800
|
+
additionalEmails: tester.additional_emails || [],
|
|
11801
|
+
avatarUrl: tester.avatar_url || void 0,
|
|
11802
|
+
platforms: tester.platforms || [],
|
|
11803
|
+
assignedTests: tester.assigned_count || 0,
|
|
11804
|
+
completedTests: tester.completed_count || 0
|
|
11536
11805
|
};
|
|
11537
11806
|
} catch (err) {
|
|
11538
11807
|
console.error("BugBear: getTesterInfo error", err);
|
|
11539
11808
|
return null;
|
|
11540
11809
|
}
|
|
11541
11810
|
}
|
|
11811
|
+
/**
|
|
11812
|
+
* Basic email format validation (defense in depth)
|
|
11813
|
+
*/
|
|
11814
|
+
isValidEmail(email) {
|
|
11815
|
+
if (!email || email.length > 254) return false;
|
|
11816
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
11817
|
+
return emailRegex.test(email);
|
|
11818
|
+
}
|
|
11819
|
+
/**
|
|
11820
|
+
* Validate report input before submission
|
|
11821
|
+
* Returns error message if invalid, null if valid
|
|
11822
|
+
*/
|
|
11823
|
+
validateReport(report) {
|
|
11824
|
+
const validTypes = ["bug", "feedback", "suggestion", "test_pass", "test_fail"];
|
|
11825
|
+
if (report.type && !validTypes.includes(report.type)) {
|
|
11826
|
+
return `Invalid report type: ${report.type}. Must be one of: ${validTypes.join(", ")}`;
|
|
11827
|
+
}
|
|
11828
|
+
const validSeverities = ["critical", "high", "medium", "low"];
|
|
11829
|
+
if (report.severity && !validSeverities.includes(report.severity)) {
|
|
11830
|
+
return `Invalid severity: ${report.severity}. Must be one of: ${validSeverities.join(", ")}`;
|
|
11831
|
+
}
|
|
11832
|
+
if (report.title && report.title.length > 500) {
|
|
11833
|
+
return "Title must be 500 characters or less";
|
|
11834
|
+
}
|
|
11835
|
+
if (report.description && report.description.length > 1e4) {
|
|
11836
|
+
return "Description must be 10,000 characters or less";
|
|
11837
|
+
}
|
|
11838
|
+
if (report.screenshots && Array.isArray(report.screenshots)) {
|
|
11839
|
+
if (report.screenshots.length > 10) {
|
|
11840
|
+
return "Maximum 10 screenshots allowed";
|
|
11841
|
+
}
|
|
11842
|
+
for (const url of report.screenshots) {
|
|
11843
|
+
if (typeof url !== "string" || url.length > 2e3) {
|
|
11844
|
+
return "Invalid screenshot URL";
|
|
11845
|
+
}
|
|
11846
|
+
}
|
|
11847
|
+
}
|
|
11848
|
+
return null;
|
|
11849
|
+
}
|
|
11850
|
+
/**
|
|
11851
|
+
* Validate profile update input
|
|
11852
|
+
* Returns error message if invalid, null if valid
|
|
11853
|
+
*/
|
|
11854
|
+
validateProfileUpdate(updates) {
|
|
11855
|
+
if (updates.name !== void 0) {
|
|
11856
|
+
if (typeof updates.name !== "string" || updates.name.length > 100) {
|
|
11857
|
+
return "Name must be 100 characters or less";
|
|
11858
|
+
}
|
|
11859
|
+
}
|
|
11860
|
+
if (updates.additionalEmails !== void 0) {
|
|
11861
|
+
if (!Array.isArray(updates.additionalEmails)) {
|
|
11862
|
+
return "Additional emails must be an array";
|
|
11863
|
+
}
|
|
11864
|
+
if (updates.additionalEmails.length > 5) {
|
|
11865
|
+
return "Maximum 5 additional emails allowed";
|
|
11866
|
+
}
|
|
11867
|
+
for (const email of updates.additionalEmails) {
|
|
11868
|
+
if (!this.isValidEmail(email)) {
|
|
11869
|
+
return `Invalid email format: ${email}`;
|
|
11870
|
+
}
|
|
11871
|
+
}
|
|
11872
|
+
}
|
|
11873
|
+
if (updates.avatarUrl !== void 0 && updates.avatarUrl !== null) {
|
|
11874
|
+
if (typeof updates.avatarUrl !== "string" || updates.avatarUrl.length > 2e3) {
|
|
11875
|
+
return "Invalid avatar URL";
|
|
11876
|
+
}
|
|
11877
|
+
}
|
|
11878
|
+
if (updates.platforms !== void 0) {
|
|
11879
|
+
if (!Array.isArray(updates.platforms)) {
|
|
11880
|
+
return "Platforms must be an array";
|
|
11881
|
+
}
|
|
11882
|
+
const validPlatforms = ["ios", "android", "web", "desktop", "other"];
|
|
11883
|
+
for (const platform of updates.platforms) {
|
|
11884
|
+
if (!validPlatforms.includes(platform)) {
|
|
11885
|
+
return `Invalid platform: ${platform}. Must be one of: ${validPlatforms.join(", ")}`;
|
|
11886
|
+
}
|
|
11887
|
+
}
|
|
11888
|
+
}
|
|
11889
|
+
return null;
|
|
11890
|
+
}
|
|
11891
|
+
/**
|
|
11892
|
+
* Check rate limit for an action
|
|
11893
|
+
* Returns { allowed: boolean, error?: string, remaining?: number }
|
|
11894
|
+
*/
|
|
11895
|
+
async checkRateLimit(identifier, action) {
|
|
11896
|
+
try {
|
|
11897
|
+
const { data, error } = await this.supabase.rpc("check_rate_limit", {
|
|
11898
|
+
p_identifier: identifier,
|
|
11899
|
+
p_action: action,
|
|
11900
|
+
p_project_id: this.config.projectId
|
|
11901
|
+
});
|
|
11902
|
+
if (error) {
|
|
11903
|
+
console.warn("BugBear: Rate limit check failed, allowing request", error.message);
|
|
11904
|
+
return { allowed: true };
|
|
11905
|
+
}
|
|
11906
|
+
if (!data.allowed) {
|
|
11907
|
+
return {
|
|
11908
|
+
allowed: false,
|
|
11909
|
+
error: `Rate limit exceeded. Try again in ${Math.ceil((new Date(data.reset_at).getTime() - Date.now()) / 1e3)} seconds.`,
|
|
11910
|
+
remaining: 0,
|
|
11911
|
+
resetAt: data.reset_at
|
|
11912
|
+
};
|
|
11913
|
+
}
|
|
11914
|
+
return {
|
|
11915
|
+
allowed: true,
|
|
11916
|
+
remaining: data.remaining,
|
|
11917
|
+
resetAt: data.reset_at
|
|
11918
|
+
};
|
|
11919
|
+
} catch (err) {
|
|
11920
|
+
console.warn("BugBear: Rate limit check error", err);
|
|
11921
|
+
return { allowed: true };
|
|
11922
|
+
}
|
|
11923
|
+
}
|
|
11542
11924
|
/**
|
|
11543
11925
|
* Update tester profile
|
|
11544
11926
|
* Allows testers to update their name, additional emails, avatar, and platforms
|
|
11545
11927
|
*/
|
|
11546
11928
|
async updateTesterProfile(updates) {
|
|
11547
11929
|
try {
|
|
11930
|
+
const validationError = this.validateProfileUpdate(updates);
|
|
11931
|
+
if (validationError) {
|
|
11932
|
+
return { success: false, error: validationError };
|
|
11933
|
+
}
|
|
11548
11934
|
const userInfo = await this.getCurrentUserInfo();
|
|
11549
11935
|
if (!userInfo) {
|
|
11550
11936
|
return { success: false, error: "Not authenticated" };
|
|
11551
11937
|
}
|
|
11938
|
+
const rateLimit = await this.checkRateLimit(userInfo.email, "profile_update");
|
|
11939
|
+
if (!rateLimit.allowed) {
|
|
11940
|
+
return { success: false, error: rateLimit.error };
|
|
11941
|
+
}
|
|
11942
|
+
const testerInfo = await this.getTesterInfo();
|
|
11943
|
+
if (!testerInfo) {
|
|
11944
|
+
return { success: false, error: "Not a registered tester" };
|
|
11945
|
+
}
|
|
11552
11946
|
const updateData = {};
|
|
11553
11947
|
if (updates.name !== void 0) updateData.name = updates.name;
|
|
11554
11948
|
if (updates.additionalEmails !== void 0) updateData.additional_emails = updates.additionalEmails;
|
|
11555
11949
|
if (updates.avatarUrl !== void 0) updateData.avatar_url = updates.avatarUrl;
|
|
11556
11950
|
if (updates.platforms !== void 0) updateData.platforms = updates.platforms;
|
|
11557
|
-
const { error } = await this.supabase.from("testers").update(updateData).eq("
|
|
11951
|
+
const { error } = await this.supabase.from("testers").update(updateData).eq("id", testerInfo.id);
|
|
11558
11952
|
if (error) {
|
|
11559
11953
|
console.error("BugBear: updateTesterProfile error", error);
|
|
11560
11954
|
return { success: false, error: error.message };
|
|
@@ -11830,6 +12224,11 @@ var BugBearClient = class {
|
|
|
11830
12224
|
console.error("BugBear: No tester info, cannot send message");
|
|
11831
12225
|
return false;
|
|
11832
12226
|
}
|
|
12227
|
+
const rateLimit = await this.checkRateLimit(testerInfo.email, "message_send");
|
|
12228
|
+
if (!rateLimit.allowed) {
|
|
12229
|
+
console.error("BugBear: Rate limit exceeded for messages");
|
|
12230
|
+
return false;
|
|
12231
|
+
}
|
|
11833
12232
|
const { error } = await this.supabase.from("discussion_messages").insert({
|
|
11834
12233
|
thread_id: threadId,
|
|
11835
12234
|
sender_type: "tester",
|
|
@@ -11924,6 +12323,248 @@ var BugBearClient = class {
|
|
|
11924
12323
|
return { success: false, error: message };
|
|
11925
12324
|
}
|
|
11926
12325
|
}
|
|
12326
|
+
// ============================================
|
|
12327
|
+
// QA Sessions (Sprint 1)
|
|
12328
|
+
// ============================================
|
|
12329
|
+
/**
|
|
12330
|
+
* Start a new QA session for exploratory testing
|
|
12331
|
+
*/
|
|
12332
|
+
async startSession(options = {}) {
|
|
12333
|
+
try {
|
|
12334
|
+
const testerInfo = await this.getTesterInfo();
|
|
12335
|
+
if (!testerInfo) {
|
|
12336
|
+
return { success: false, error: "Not authenticated as a tester" };
|
|
12337
|
+
}
|
|
12338
|
+
const activeSession = await this.getActiveSession();
|
|
12339
|
+
if (activeSession) {
|
|
12340
|
+
return { success: false, error: "You already have an active session. End it before starting a new one." };
|
|
12341
|
+
}
|
|
12342
|
+
const { data, error } = await this.supabase.rpc("start_qa_session", {
|
|
12343
|
+
p_project_id: this.config.projectId,
|
|
12344
|
+
p_tester_id: testerInfo.id,
|
|
12345
|
+
p_focus_area: options.focusArea || null,
|
|
12346
|
+
p_track: options.track || null,
|
|
12347
|
+
p_platform: options.platform || null
|
|
12348
|
+
});
|
|
12349
|
+
if (error) {
|
|
12350
|
+
console.error("BugBear: Failed to start session", error);
|
|
12351
|
+
return { success: false, error: error.message };
|
|
12352
|
+
}
|
|
12353
|
+
const session = await this.getSession(data);
|
|
12354
|
+
if (!session) {
|
|
12355
|
+
return { success: false, error: "Session created but could not be fetched" };
|
|
12356
|
+
}
|
|
12357
|
+
return { success: true, session };
|
|
12358
|
+
} catch (err) {
|
|
12359
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12360
|
+
console.error("BugBear: Error starting session", err);
|
|
12361
|
+
return { success: false, error: message };
|
|
12362
|
+
}
|
|
12363
|
+
}
|
|
12364
|
+
/**
|
|
12365
|
+
* End the current QA session
|
|
12366
|
+
*/
|
|
12367
|
+
async endSession(sessionId, options = {}) {
|
|
12368
|
+
try {
|
|
12369
|
+
const { data, error } = await this.supabase.rpc("end_qa_session", {
|
|
12370
|
+
p_session_id: sessionId,
|
|
12371
|
+
p_notes: options.notes || null,
|
|
12372
|
+
p_routes_covered: options.routesCovered || null
|
|
12373
|
+
});
|
|
12374
|
+
if (error) {
|
|
12375
|
+
console.error("BugBear: Failed to end session", error);
|
|
12376
|
+
return { success: false, error: error.message };
|
|
12377
|
+
}
|
|
12378
|
+
const session = this.transformSession(data);
|
|
12379
|
+
return { success: true, session };
|
|
12380
|
+
} catch (err) {
|
|
12381
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12382
|
+
console.error("BugBear: Error ending session", err);
|
|
12383
|
+
return { success: false, error: message };
|
|
12384
|
+
}
|
|
12385
|
+
}
|
|
12386
|
+
/**
|
|
12387
|
+
* Get the current active session for the tester
|
|
12388
|
+
*/
|
|
12389
|
+
async getActiveSession() {
|
|
12390
|
+
try {
|
|
12391
|
+
const testerInfo = await this.getTesterInfo();
|
|
12392
|
+
if (!testerInfo) return null;
|
|
12393
|
+
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();
|
|
12394
|
+
if (error || !data) return null;
|
|
12395
|
+
return this.transformSession(data);
|
|
12396
|
+
} catch (err) {
|
|
12397
|
+
console.error("BugBear: Error fetching active session", err);
|
|
12398
|
+
return null;
|
|
12399
|
+
}
|
|
12400
|
+
}
|
|
12401
|
+
/**
|
|
12402
|
+
* Get a session by ID
|
|
12403
|
+
*/
|
|
12404
|
+
async getSession(sessionId) {
|
|
12405
|
+
try {
|
|
12406
|
+
const { data, error } = await this.supabase.from("qa_sessions").select("*").eq("id", sessionId).single();
|
|
12407
|
+
if (error || !data) return null;
|
|
12408
|
+
return this.transformSession(data);
|
|
12409
|
+
} catch (err) {
|
|
12410
|
+
console.error("BugBear: Error fetching session", err);
|
|
12411
|
+
return null;
|
|
12412
|
+
}
|
|
12413
|
+
}
|
|
12414
|
+
/**
|
|
12415
|
+
* Get session history for the tester
|
|
12416
|
+
*/
|
|
12417
|
+
async getSessionHistory(limit = 10) {
|
|
12418
|
+
try {
|
|
12419
|
+
const testerInfo = await this.getTesterInfo();
|
|
12420
|
+
if (!testerInfo) return [];
|
|
12421
|
+
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);
|
|
12422
|
+
if (error) {
|
|
12423
|
+
console.error("BugBear: Failed to fetch session history", error);
|
|
12424
|
+
return [];
|
|
12425
|
+
}
|
|
12426
|
+
return (data || []).map((s) => this.transformSession(s));
|
|
12427
|
+
} catch (err) {
|
|
12428
|
+
console.error("BugBear: Error fetching session history", err);
|
|
12429
|
+
return [];
|
|
12430
|
+
}
|
|
12431
|
+
}
|
|
12432
|
+
/**
|
|
12433
|
+
* Add a finding during a session
|
|
12434
|
+
*/
|
|
12435
|
+
async addFinding(sessionId, options) {
|
|
12436
|
+
try {
|
|
12437
|
+
const { data, error } = await this.supabase.rpc("add_session_finding", {
|
|
12438
|
+
p_session_id: sessionId,
|
|
12439
|
+
p_type: options.type,
|
|
12440
|
+
p_title: options.title,
|
|
12441
|
+
p_description: options.description || null,
|
|
12442
|
+
p_severity: options.severity || "observation",
|
|
12443
|
+
p_route: options.route || null,
|
|
12444
|
+
p_screenshot_url: options.screenshotUrl || null,
|
|
12445
|
+
p_console_logs: options.consoleLogs || null,
|
|
12446
|
+
p_network_snapshot: options.networkSnapshot || null,
|
|
12447
|
+
p_device_info: options.deviceInfo || null,
|
|
12448
|
+
p_app_context: options.appContext || null
|
|
12449
|
+
});
|
|
12450
|
+
if (error) {
|
|
12451
|
+
console.error("BugBear: Failed to add finding", error);
|
|
12452
|
+
return { success: false, error: error.message };
|
|
12453
|
+
}
|
|
12454
|
+
const finding = this.transformFinding(data);
|
|
12455
|
+
return { success: true, finding };
|
|
12456
|
+
} catch (err) {
|
|
12457
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12458
|
+
console.error("BugBear: Error adding finding", err);
|
|
12459
|
+
return { success: false, error: message };
|
|
12460
|
+
}
|
|
12461
|
+
}
|
|
12462
|
+
/**
|
|
12463
|
+
* Get findings for a session
|
|
12464
|
+
*/
|
|
12465
|
+
async getSessionFindings(sessionId) {
|
|
12466
|
+
try {
|
|
12467
|
+
const { data, error } = await this.supabase.from("qa_findings").select("*").eq("session_id", sessionId).order("created_at", { ascending: true });
|
|
12468
|
+
if (error) {
|
|
12469
|
+
console.error("BugBear: Failed to fetch findings", error);
|
|
12470
|
+
return [];
|
|
12471
|
+
}
|
|
12472
|
+
return (data || []).map((f) => this.transformFinding(f));
|
|
12473
|
+
} catch (err) {
|
|
12474
|
+
console.error("BugBear: Error fetching findings", err);
|
|
12475
|
+
return [];
|
|
12476
|
+
}
|
|
12477
|
+
}
|
|
12478
|
+
/**
|
|
12479
|
+
* Convert a finding to a bug report
|
|
12480
|
+
*/
|
|
12481
|
+
async convertFindingToBug(findingId) {
|
|
12482
|
+
try {
|
|
12483
|
+
const { data, error } = await this.supabase.rpc("convert_finding_to_bug", {
|
|
12484
|
+
p_finding_id: findingId
|
|
12485
|
+
});
|
|
12486
|
+
if (error) {
|
|
12487
|
+
console.error("BugBear: Failed to convert finding", error);
|
|
12488
|
+
return { success: false, error: error.message };
|
|
12489
|
+
}
|
|
12490
|
+
return { success: true, bugId: data };
|
|
12491
|
+
} catch (err) {
|
|
12492
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12493
|
+
console.error("BugBear: Error converting finding", err);
|
|
12494
|
+
return { success: false, error: message };
|
|
12495
|
+
}
|
|
12496
|
+
}
|
|
12497
|
+
/**
|
|
12498
|
+
* Dismiss a finding
|
|
12499
|
+
*/
|
|
12500
|
+
async dismissFinding(findingId, reason) {
|
|
12501
|
+
try {
|
|
12502
|
+
const { error } = await this.supabase.from("qa_findings").update({
|
|
12503
|
+
dismissed: true,
|
|
12504
|
+
dismissed_reason: reason || null,
|
|
12505
|
+
dismissed_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
12506
|
+
}).eq("id", findingId);
|
|
12507
|
+
if (error) {
|
|
12508
|
+
console.error("BugBear: Failed to dismiss finding", error);
|
|
12509
|
+
return { success: false, error: error.message };
|
|
12510
|
+
}
|
|
12511
|
+
return { success: true };
|
|
12512
|
+
} catch (err) {
|
|
12513
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
12514
|
+
console.error("BugBear: Error dismissing finding", err);
|
|
12515
|
+
return { success: false, error: message };
|
|
12516
|
+
}
|
|
12517
|
+
}
|
|
12518
|
+
/**
|
|
12519
|
+
* Transform database session to QASession type
|
|
12520
|
+
*/
|
|
12521
|
+
transformSession(data) {
|
|
12522
|
+
return {
|
|
12523
|
+
id: data.id,
|
|
12524
|
+
projectId: data.project_id,
|
|
12525
|
+
testerId: data.tester_id,
|
|
12526
|
+
focusArea: data.focus_area,
|
|
12527
|
+
track: data.track,
|
|
12528
|
+
platform: data.platform,
|
|
12529
|
+
startedAt: data.started_at,
|
|
12530
|
+
endedAt: data.ended_at,
|
|
12531
|
+
notes: data.notes,
|
|
12532
|
+
routesCovered: data.routes_covered || [],
|
|
12533
|
+
status: data.status,
|
|
12534
|
+
durationMinutes: data.duration_minutes,
|
|
12535
|
+
findingsCount: data.findings_count || 0,
|
|
12536
|
+
bugsFiled: data.bugs_filed || 0,
|
|
12537
|
+
createdAt: data.created_at,
|
|
12538
|
+
updatedAt: data.updated_at
|
|
12539
|
+
};
|
|
12540
|
+
}
|
|
12541
|
+
/**
|
|
12542
|
+
* Transform database finding to QAFinding type
|
|
12543
|
+
*/
|
|
12544
|
+
transformFinding(data) {
|
|
12545
|
+
return {
|
|
12546
|
+
id: data.id,
|
|
12547
|
+
sessionId: data.session_id,
|
|
12548
|
+
projectId: data.project_id,
|
|
12549
|
+
type: data.type,
|
|
12550
|
+
severity: data.severity,
|
|
12551
|
+
title: data.title,
|
|
12552
|
+
description: data.description,
|
|
12553
|
+
route: data.route,
|
|
12554
|
+
screenshotUrl: data.screenshot_url,
|
|
12555
|
+
consoleLogs: data.console_logs,
|
|
12556
|
+
networkSnapshot: data.network_snapshot,
|
|
12557
|
+
deviceInfo: data.device_info,
|
|
12558
|
+
appContext: data.app_context,
|
|
12559
|
+
convertedToBugId: data.converted_to_bug_id,
|
|
12560
|
+
convertedToTestId: data.converted_to_test_id,
|
|
12561
|
+
dismissed: data.dismissed || false,
|
|
12562
|
+
dismissedReason: data.dismissed_reason,
|
|
12563
|
+
dismissedAt: data.dismissed_at,
|
|
12564
|
+
createdAt: data.created_at,
|
|
12565
|
+
updatedAt: data.updated_at
|
|
12566
|
+
};
|
|
12567
|
+
}
|
|
11927
12568
|
};
|
|
11928
12569
|
function createBugBear(config) {
|
|
11929
12570
|
return new BugBearClient(config);
|
|
@@ -12635,7 +13276,7 @@ function BugBearButton({
|
|
|
12635
13276
|
const steps = displayedAssignment.testCase.steps;
|
|
12636
13277
|
const info = templateInfo[template];
|
|
12637
13278
|
const rubricMode = displayedAssignment.testCase.track?.rubricMode || "pass_fail";
|
|
12638
|
-
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(View, { style: [styles.templateBadge, { backgroundColor: displayedAssignment.testCase.track?.color ? `${displayedAssignment.testCase.track.color}20` : "#
|
|
13279
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(View, { style: [styles.templateBadge, { backgroundColor: displayedAssignment.testCase.track?.color ? `${displayedAssignment.testCase.track.color}20` : "#3f3f46" }] }, /* @__PURE__ */ React2.createElement(Text, { style: styles.templateIcon }, info.icon), /* @__PURE__ */ React2.createElement(Text, { style: styles.templateName }, info.name), /* @__PURE__ */ React2.createElement(Text, { style: styles.templateAction }, "\u2022 ", info.action)), /* @__PURE__ */ React2.createElement(TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles.stepsToggle }, /* @__PURE__ */ React2.createElement(Text, { style: styles.stepsToggleText }, showSteps ? "\u25BC" : "\u25B6", " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && template === "steps" && /* @__PURE__ */ React2.createElement(View, { style: styles.stepsList }, steps.map((step, idx) => /* @__PURE__ */ React2.createElement(View, { key: idx, style: styles.step }, /* @__PURE__ */ React2.createElement(View, { style: styles.stepNumber }, /* @__PURE__ */ React2.createElement(Text, { style: styles.stepNumberText }, step.stepNumber)), /* @__PURE__ */ React2.createElement(View, { style: styles.stepContent }, /* @__PURE__ */ React2.createElement(Text, { style: styles.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ React2.createElement(Text, { style: styles.stepExpected }, "\u2192 ", step.expectedResult))))), showSteps && template === "checklist" && /* @__PURE__ */ React2.createElement(View, { style: styles.stepsList }, steps.map((step, idx) => /* @__PURE__ */ React2.createElement(
|
|
12639
13280
|
TouchableOpacity,
|
|
12640
13281
|
{
|
|
12641
13282
|
key: idx,
|
|
@@ -12841,7 +13482,7 @@ function BugBearButton({
|
|
|
12841
13482
|
value: composeSubject,
|
|
12842
13483
|
onChangeText: setComposeSubject,
|
|
12843
13484
|
placeholder: "What's this about?",
|
|
12844
|
-
placeholderTextColor: "#
|
|
13485
|
+
placeholderTextColor: "#71717a",
|
|
12845
13486
|
maxLength: 100
|
|
12846
13487
|
}
|
|
12847
13488
|
), /* @__PURE__ */ React2.createElement(Text, { style: [styles.label, { marginTop: 16 }] }, "Message"), /* @__PURE__ */ React2.createElement(
|
|
@@ -12851,7 +13492,7 @@ function BugBearButton({
|
|
|
12851
13492
|
value: composeMessage,
|
|
12852
13493
|
onChangeText: setComposeMessage,
|
|
12853
13494
|
placeholder: "Write your message...",
|
|
12854
|
-
placeholderTextColor: "#
|
|
13495
|
+
placeholderTextColor: "#71717a",
|
|
12855
13496
|
multiline: true,
|
|
12856
13497
|
numberOfLines: 6,
|
|
12857
13498
|
textAlignVertical: "top",
|
|
@@ -12963,7 +13604,7 @@ function BugBearButton({
|
|
|
12963
13604
|
value: description,
|
|
12964
13605
|
onChangeText: setDescription,
|
|
12965
13606
|
placeholder: "Describe the issue...",
|
|
12966
|
-
placeholderTextColor: "#
|
|
13607
|
+
placeholderTextColor: "#71717a",
|
|
12967
13608
|
multiline: true,
|
|
12968
13609
|
numberOfLines: 4,
|
|
12969
13610
|
textAlignVertical: "top"
|
|
@@ -12988,7 +13629,7 @@ function BugBearButton({
|
|
|
12988
13629
|
value: profileName,
|
|
12989
13630
|
onChangeText: setProfileName,
|
|
12990
13631
|
placeholder: "Your name",
|
|
12991
|
-
placeholderTextColor: "#
|
|
13632
|
+
placeholderTextColor: "#71717a"
|
|
12992
13633
|
}
|
|
12993
13634
|
)), /* @__PURE__ */ React2.createElement(View, { style: styles.profileSection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "Primary Email"), /* @__PURE__ */ React2.createElement(View, { style: styles.profileReadOnly }, /* @__PURE__ */ React2.createElement(Text, { style: styles.profileReadOnlyText }, testerInfo?.email), /* @__PURE__ */ React2.createElement(Text, { style: styles.profileReadOnlyHint }, "Main communication email"))), /* @__PURE__ */ React2.createElement(View, { style: styles.profileSection }, /* @__PURE__ */ React2.createElement(Text, { style: styles.label }, "Additional Testing Emails"), /* @__PURE__ */ React2.createElement(Text, { style: styles.profileHint }, "Add other emails you use to test on different accounts"), profileAdditionalEmails.map((email) => /* @__PURE__ */ React2.createElement(View, { key: email, style: styles.emailChip }, /* @__PURE__ */ React2.createElement(Text, { style: styles.emailChipText }, email), /* @__PURE__ */ React2.createElement(TouchableOpacity, { onPress: () => handleRemoveEmail(email) }, /* @__PURE__ */ React2.createElement(Text, { style: styles.emailChipRemove }, "\u2715")))), /* @__PURE__ */ React2.createElement(View, { style: styles.addEmailRow }, /* @__PURE__ */ React2.createElement(
|
|
12994
13635
|
TextInput,
|
|
@@ -12997,7 +13638,7 @@ function BugBearButton({
|
|
|
12997
13638
|
value: newEmailInput,
|
|
12998
13639
|
onChangeText: setNewEmailInput,
|
|
12999
13640
|
placeholder: "email@example.com",
|
|
13000
|
-
placeholderTextColor: "#
|
|
13641
|
+
placeholderTextColor: "#71717a",
|
|
13001
13642
|
keyboardType: "email-address",
|
|
13002
13643
|
autoCapitalize: "none"
|
|
13003
13644
|
}
|
|
@@ -13062,7 +13703,7 @@ function BugBearButton({
|
|
|
13062
13703
|
value: replyText,
|
|
13063
13704
|
onChangeText: setReplyText,
|
|
13064
13705
|
placeholder: "Type a reply...",
|
|
13065
|
-
placeholderTextColor: "#
|
|
13706
|
+
placeholderTextColor: "#71717a",
|
|
13066
13707
|
multiline: true,
|
|
13067
13708
|
maxLength: 1e3
|
|
13068
13709
|
}
|
|
@@ -13091,13 +13732,13 @@ var styles = StyleSheet.create({
|
|
|
13091
13732
|
width: 56,
|
|
13092
13733
|
height: 56,
|
|
13093
13734
|
borderRadius: 28,
|
|
13094
|
-
backgroundColor: "#
|
|
13735
|
+
backgroundColor: "#3B82F6",
|
|
13095
13736
|
justifyContent: "center",
|
|
13096
13737
|
alignItems: "center",
|
|
13097
|
-
shadowColor: "#
|
|
13738
|
+
shadowColor: "#3B82F6",
|
|
13098
13739
|
shadowOffset: { width: 0, height: 4 },
|
|
13099
|
-
shadowOpacity: 0.
|
|
13100
|
-
shadowRadius:
|
|
13740
|
+
shadowOpacity: 0.4,
|
|
13741
|
+
shadowRadius: 12,
|
|
13101
13742
|
elevation: 8,
|
|
13102
13743
|
zIndex: 999999
|
|
13103
13744
|
},
|
|
@@ -13130,10 +13771,10 @@ var styles = StyleSheet.create({
|
|
|
13130
13771
|
modalContainer: {
|
|
13131
13772
|
flex: 1,
|
|
13132
13773
|
justifyContent: "flex-end",
|
|
13133
|
-
backgroundColor: "rgba(0, 0, 0, 0.
|
|
13774
|
+
backgroundColor: "rgba(0, 0, 0, 0.6)"
|
|
13134
13775
|
},
|
|
13135
13776
|
modalContent: {
|
|
13136
|
-
backgroundColor: "#
|
|
13777
|
+
backgroundColor: "#18181b",
|
|
13137
13778
|
borderTopLeftRadius: 20,
|
|
13138
13779
|
borderTopRightRadius: 20,
|
|
13139
13780
|
maxHeight: "85%"
|
|
@@ -13142,11 +13783,13 @@ var styles = StyleSheet.create({
|
|
|
13142
13783
|
flexDirection: "row",
|
|
13143
13784
|
alignItems: "center",
|
|
13144
13785
|
justifyContent: "space-between",
|
|
13145
|
-
backgroundColor: "#
|
|
13786
|
+
backgroundColor: "#09090b",
|
|
13146
13787
|
paddingHorizontal: 16,
|
|
13147
13788
|
paddingVertical: 12,
|
|
13148
13789
|
borderTopLeftRadius: 20,
|
|
13149
|
-
borderTopRightRadius: 20
|
|
13790
|
+
borderTopRightRadius: 20,
|
|
13791
|
+
borderBottomWidth: 1,
|
|
13792
|
+
borderBottomColor: "#27272a"
|
|
13150
13793
|
},
|
|
13151
13794
|
headerLeft: {
|
|
13152
13795
|
flexDirection: "row",
|
|
@@ -13157,12 +13800,12 @@ var styles = StyleSheet.create({
|
|
|
13157
13800
|
marginRight: 10
|
|
13158
13801
|
},
|
|
13159
13802
|
headerTitle: {
|
|
13160
|
-
color: "#
|
|
13803
|
+
color: "#fafafa",
|
|
13161
13804
|
fontSize: 16,
|
|
13162
13805
|
fontWeight: "600"
|
|
13163
13806
|
},
|
|
13164
13807
|
headerSubtitle: {
|
|
13165
|
-
color: "#
|
|
13808
|
+
color: "#71717a",
|
|
13166
13809
|
fontSize: 12
|
|
13167
13810
|
},
|
|
13168
13811
|
headerNameButton: {
|
|
@@ -13171,20 +13814,21 @@ var styles = StyleSheet.create({
|
|
|
13171
13814
|
gap: 4
|
|
13172
13815
|
},
|
|
13173
13816
|
headerPencil: {
|
|
13174
|
-
color: "#
|
|
13817
|
+
color: "#71717a",
|
|
13175
13818
|
fontSize: 11
|
|
13176
13819
|
},
|
|
13177
13820
|
closeButton: {
|
|
13178
13821
|
padding: 8
|
|
13179
13822
|
},
|
|
13180
13823
|
closeButtonText: {
|
|
13181
|
-
color: "#
|
|
13824
|
+
color: "#a1a1aa",
|
|
13182
13825
|
fontSize: 18
|
|
13183
13826
|
},
|
|
13184
13827
|
tabs: {
|
|
13185
13828
|
flexDirection: "row",
|
|
13186
13829
|
borderBottomWidth: 1,
|
|
13187
|
-
borderBottomColor: "#
|
|
13830
|
+
borderBottomColor: "#27272a",
|
|
13831
|
+
backgroundColor: "#18181b"
|
|
13188
13832
|
},
|
|
13189
13833
|
tab: {
|
|
13190
13834
|
flex: 1,
|
|
@@ -13193,15 +13837,15 @@ var styles = StyleSheet.create({
|
|
|
13193
13837
|
},
|
|
13194
13838
|
activeTab: {
|
|
13195
13839
|
borderBottomWidth: 2,
|
|
13196
|
-
borderBottomColor: "#
|
|
13840
|
+
borderBottomColor: "#3B82F6"
|
|
13197
13841
|
},
|
|
13198
13842
|
tabText: {
|
|
13199
13843
|
fontSize: 14,
|
|
13200
13844
|
fontWeight: "500",
|
|
13201
|
-
color: "#
|
|
13845
|
+
color: "#71717a"
|
|
13202
13846
|
},
|
|
13203
13847
|
activeTabText: {
|
|
13204
|
-
color: "#
|
|
13848
|
+
color: "#3B82F6"
|
|
13205
13849
|
},
|
|
13206
13850
|
content: {
|
|
13207
13851
|
padding: 16,
|
|
@@ -13214,16 +13858,16 @@ var styles = StyleSheet.create({
|
|
|
13214
13858
|
paddingHorizontal: 16,
|
|
13215
13859
|
paddingVertical: 12,
|
|
13216
13860
|
borderTopWidth: 1,
|
|
13217
|
-
borderTopColor: "#
|
|
13218
|
-
backgroundColor: "#
|
|
13861
|
+
borderTopColor: "#27272a",
|
|
13862
|
+
backgroundColor: "#09090b"
|
|
13219
13863
|
},
|
|
13220
13864
|
footerText: {
|
|
13221
13865
|
fontSize: 12,
|
|
13222
|
-
color: "#
|
|
13866
|
+
color: "#52525b"
|
|
13223
13867
|
},
|
|
13224
13868
|
refreshText: {
|
|
13225
13869
|
fontSize: 12,
|
|
13226
|
-
color: "#
|
|
13870
|
+
color: "#71717a"
|
|
13227
13871
|
},
|
|
13228
13872
|
emptyState: {
|
|
13229
13873
|
alignItems: "center",
|
|
@@ -13235,7 +13879,7 @@ var styles = StyleSheet.create({
|
|
|
13235
13879
|
emptyTitle: {
|
|
13236
13880
|
fontSize: 18,
|
|
13237
13881
|
fontWeight: "600",
|
|
13238
|
-
color: "#
|
|
13882
|
+
color: "#e4e4e7",
|
|
13239
13883
|
marginTop: 12
|
|
13240
13884
|
},
|
|
13241
13885
|
passedEmoji: {
|
|
@@ -13250,26 +13894,26 @@ var styles = StyleSheet.create({
|
|
|
13250
13894
|
},
|
|
13251
13895
|
emptySubtitle: {
|
|
13252
13896
|
fontSize: 14,
|
|
13253
|
-
color: "#
|
|
13897
|
+
color: "#71717a",
|
|
13254
13898
|
marginTop: 4
|
|
13255
13899
|
},
|
|
13256
13900
|
// List view styles
|
|
13257
13901
|
listHeader: {
|
|
13258
13902
|
fontSize: 12,
|
|
13259
|
-
color: "#
|
|
13903
|
+
color: "#71717a",
|
|
13260
13904
|
marginBottom: 12
|
|
13261
13905
|
},
|
|
13262
13906
|
listItem: {
|
|
13263
|
-
backgroundColor: "#
|
|
13907
|
+
backgroundColor: "#27272a",
|
|
13264
13908
|
borderRadius: 12,
|
|
13265
13909
|
padding: 12,
|
|
13266
13910
|
marginBottom: 8,
|
|
13267
13911
|
borderWidth: 1,
|
|
13268
|
-
borderColor: "#
|
|
13912
|
+
borderColor: "#3f3f46"
|
|
13269
13913
|
},
|
|
13270
13914
|
listItemCurrent: {
|
|
13271
|
-
backgroundColor: "#
|
|
13272
|
-
borderColor: "#
|
|
13915
|
+
backgroundColor: "#1e3a5f",
|
|
13916
|
+
borderColor: "#3B82F6"
|
|
13273
13917
|
},
|
|
13274
13918
|
listItemHeader: {
|
|
13275
13919
|
flexDirection: "row",
|
|
@@ -13280,7 +13924,7 @@ var styles = StyleSheet.create({
|
|
|
13280
13924
|
listItemKey: {
|
|
13281
13925
|
fontSize: 12,
|
|
13282
13926
|
fontFamily: Platform2.OS === "ios" ? "Menlo" : "monospace",
|
|
13283
|
-
color: "#
|
|
13927
|
+
color: "#71717a"
|
|
13284
13928
|
},
|
|
13285
13929
|
listItemBadges: {
|
|
13286
13930
|
flexDirection: "row",
|
|
@@ -13289,7 +13933,7 @@ var styles = StyleSheet.create({
|
|
|
13289
13933
|
listItemTitle: {
|
|
13290
13934
|
fontSize: 14,
|
|
13291
13935
|
fontWeight: "600",
|
|
13292
|
-
color: "#
|
|
13936
|
+
color: "#fafafa",
|
|
13293
13937
|
marginBottom: 4
|
|
13294
13938
|
},
|
|
13295
13939
|
listItemMeta: {
|
|
@@ -13298,11 +13942,11 @@ var styles = StyleSheet.create({
|
|
|
13298
13942
|
},
|
|
13299
13943
|
listItemMetaText: {
|
|
13300
13944
|
fontSize: 12,
|
|
13301
|
-
color: "#
|
|
13945
|
+
color: "#71717a"
|
|
13302
13946
|
},
|
|
13303
13947
|
currentBadge: {
|
|
13304
13948
|
fontSize: 12,
|
|
13305
|
-
color: "#
|
|
13949
|
+
color: "#3B82F6",
|
|
13306
13950
|
fontWeight: "600",
|
|
13307
13951
|
marginLeft: 8
|
|
13308
13952
|
},
|
|
@@ -13312,15 +13956,17 @@ var styles = StyleSheet.create({
|
|
|
13312
13956
|
},
|
|
13313
13957
|
backButtonText: {
|
|
13314
13958
|
fontSize: 14,
|
|
13315
|
-
color: "#
|
|
13959
|
+
color: "#3B82F6",
|
|
13316
13960
|
fontWeight: "500"
|
|
13317
13961
|
},
|
|
13318
13962
|
// Test card styles
|
|
13319
13963
|
testCard: {
|
|
13320
|
-
backgroundColor: "#
|
|
13964
|
+
backgroundColor: "#27272a",
|
|
13321
13965
|
borderRadius: 12,
|
|
13322
13966
|
padding: 16,
|
|
13323
|
-
marginBottom: 16
|
|
13967
|
+
marginBottom: 16,
|
|
13968
|
+
borderWidth: 1,
|
|
13969
|
+
borderColor: "#3f3f46"
|
|
13324
13970
|
},
|
|
13325
13971
|
testHeader: {
|
|
13326
13972
|
flexDirection: "row",
|
|
@@ -13335,7 +13981,7 @@ var styles = StyleSheet.create({
|
|
|
13335
13981
|
testKey: {
|
|
13336
13982
|
fontSize: 12,
|
|
13337
13983
|
fontFamily: Platform2.OS === "ios" ? "Menlo" : "monospace",
|
|
13338
|
-
color: "#
|
|
13984
|
+
color: "#71717a"
|
|
13339
13985
|
},
|
|
13340
13986
|
trackBadge: {
|
|
13341
13987
|
paddingHorizontal: 6,
|
|
@@ -13347,38 +13993,38 @@ var styles = StyleSheet.create({
|
|
|
13347
13993
|
color: "#fff"
|
|
13348
13994
|
},
|
|
13349
13995
|
priorityBadge: {
|
|
13350
|
-
backgroundColor: "#
|
|
13996
|
+
backgroundColor: "#3f3f46",
|
|
13351
13997
|
paddingHorizontal: 8,
|
|
13352
13998
|
paddingVertical: 2,
|
|
13353
13999
|
borderRadius: 4
|
|
13354
14000
|
},
|
|
13355
14001
|
priorityP0: {
|
|
13356
|
-
backgroundColor: "#
|
|
14002
|
+
backgroundColor: "#7f1d1d"
|
|
13357
14003
|
},
|
|
13358
14004
|
priorityP1: {
|
|
13359
|
-
backgroundColor: "#
|
|
14005
|
+
backgroundColor: "#78350f"
|
|
13360
14006
|
},
|
|
13361
14007
|
priorityText: {
|
|
13362
14008
|
fontSize: 12,
|
|
13363
14009
|
fontWeight: "600",
|
|
13364
|
-
color: "#
|
|
14010
|
+
color: "#e4e4e7"
|
|
13365
14011
|
},
|
|
13366
14012
|
testTitle: {
|
|
13367
14013
|
fontSize: 16,
|
|
13368
14014
|
fontWeight: "600",
|
|
13369
|
-
color: "#
|
|
14015
|
+
color: "#fafafa",
|
|
13370
14016
|
marginBottom: 4
|
|
13371
14017
|
},
|
|
13372
14018
|
testDescription: {
|
|
13373
14019
|
fontSize: 14,
|
|
13374
|
-
color: "#
|
|
14020
|
+
color: "#a1a1aa",
|
|
13375
14021
|
marginBottom: 8
|
|
13376
14022
|
},
|
|
13377
14023
|
// Navigate button
|
|
13378
14024
|
navigateButton: {
|
|
13379
|
-
backgroundColor: "#
|
|
14025
|
+
backgroundColor: "#1e3a5f",
|
|
13380
14026
|
borderWidth: 1,
|
|
13381
|
-
borderColor: "#
|
|
14027
|
+
borderColor: "#3B82F6",
|
|
13382
14028
|
borderRadius: 8,
|
|
13383
14029
|
paddingVertical: 10,
|
|
13384
14030
|
paddingHorizontal: 16,
|
|
@@ -13388,7 +14034,7 @@ var styles = StyleSheet.create({
|
|
|
13388
14034
|
navigateButtonText: {
|
|
13389
14035
|
fontSize: 14,
|
|
13390
14036
|
fontWeight: "500",
|
|
13391
|
-
color: "#
|
|
14037
|
+
color: "#60a5fa"
|
|
13392
14038
|
},
|
|
13393
14039
|
// Template badge
|
|
13394
14040
|
templateBadge: {
|
|
@@ -13406,12 +14052,12 @@ var styles = StyleSheet.create({
|
|
|
13406
14052
|
templateName: {
|
|
13407
14053
|
fontSize: 12,
|
|
13408
14054
|
fontWeight: "600",
|
|
13409
|
-
color: "#
|
|
14055
|
+
color: "#e4e4e7",
|
|
13410
14056
|
marginRight: 4
|
|
13411
14057
|
},
|
|
13412
14058
|
templateAction: {
|
|
13413
14059
|
fontSize: 12,
|
|
13414
|
-
color: "#
|
|
14060
|
+
color: "#71717a"
|
|
13415
14061
|
},
|
|
13416
14062
|
// Steps toggle
|
|
13417
14063
|
stepsToggle: {
|
|
@@ -13419,7 +14065,7 @@ var styles = StyleSheet.create({
|
|
|
13419
14065
|
},
|
|
13420
14066
|
stepsToggleText: {
|
|
13421
14067
|
fontSize: 14,
|
|
13422
|
-
color: "#
|
|
14068
|
+
color: "#3B82F6",
|
|
13423
14069
|
fontWeight: "500"
|
|
13424
14070
|
},
|
|
13425
14071
|
stepsList: {
|
|
@@ -13433,7 +14079,7 @@ var styles = StyleSheet.create({
|
|
|
13433
14079
|
width: 24,
|
|
13434
14080
|
height: 24,
|
|
13435
14081
|
borderRadius: 12,
|
|
13436
|
-
backgroundColor: "#
|
|
14082
|
+
backgroundColor: "#1e3a5f",
|
|
13437
14083
|
justifyContent: "center",
|
|
13438
14084
|
alignItems: "center",
|
|
13439
14085
|
marginRight: 12
|
|
@@ -13441,41 +14087,41 @@ var styles = StyleSheet.create({
|
|
|
13441
14087
|
stepNumberText: {
|
|
13442
14088
|
fontSize: 12,
|
|
13443
14089
|
fontWeight: "600",
|
|
13444
|
-
color: "#
|
|
14090
|
+
color: "#3B82F6"
|
|
13445
14091
|
},
|
|
13446
14092
|
stepContent: {
|
|
13447
14093
|
flex: 1
|
|
13448
14094
|
},
|
|
13449
14095
|
stepAction: {
|
|
13450
14096
|
fontSize: 14,
|
|
13451
|
-
color: "#
|
|
14097
|
+
color: "#e4e4e7"
|
|
13452
14098
|
},
|
|
13453
14099
|
stepExpected: {
|
|
13454
14100
|
fontSize: 12,
|
|
13455
|
-
color: "#
|
|
14101
|
+
color: "#71717a",
|
|
13456
14102
|
marginTop: 2
|
|
13457
14103
|
},
|
|
13458
14104
|
// Checklist styles
|
|
13459
14105
|
checklistItem: {
|
|
13460
14106
|
flexDirection: "row",
|
|
13461
14107
|
alignItems: "center",
|
|
13462
|
-
backgroundColor: "#
|
|
14108
|
+
backgroundColor: "#27272a",
|
|
13463
14109
|
borderWidth: 1,
|
|
13464
|
-
borderColor: "#
|
|
14110
|
+
borderColor: "#3f3f46",
|
|
13465
14111
|
borderRadius: 8,
|
|
13466
14112
|
padding: 12,
|
|
13467
14113
|
marginBottom: 8
|
|
13468
14114
|
},
|
|
13469
14115
|
checklistItemChecked: {
|
|
13470
|
-
backgroundColor: "#
|
|
13471
|
-
borderColor: "#
|
|
14116
|
+
backgroundColor: "#14532d",
|
|
14117
|
+
borderColor: "#22C55E"
|
|
13472
14118
|
},
|
|
13473
14119
|
checkbox: {
|
|
13474
14120
|
width: 24,
|
|
13475
14121
|
height: 24,
|
|
13476
14122
|
borderRadius: 4,
|
|
13477
14123
|
borderWidth: 2,
|
|
13478
|
-
borderColor: "#
|
|
14124
|
+
borderColor: "#3B82F6",
|
|
13479
14125
|
marginRight: 12,
|
|
13480
14126
|
justifyContent: "center",
|
|
13481
14127
|
alignItems: "center"
|
|
@@ -13492,16 +14138,16 @@ var styles = StyleSheet.create({
|
|
|
13492
14138
|
checklistText: {
|
|
13493
14139
|
flex: 1,
|
|
13494
14140
|
fontSize: 14,
|
|
13495
|
-
color: "#
|
|
14141
|
+
color: "#e4e4e7"
|
|
13496
14142
|
},
|
|
13497
14143
|
checklistTextChecked: {
|
|
13498
|
-
color: "#
|
|
14144
|
+
color: "#4ade80"
|
|
13499
14145
|
},
|
|
13500
14146
|
// Rubric styles
|
|
13501
14147
|
rubricItem: {
|
|
13502
|
-
backgroundColor: "#
|
|
14148
|
+
backgroundColor: "#27272a",
|
|
13503
14149
|
borderWidth: 1,
|
|
13504
|
-
borderColor: "#
|
|
14150
|
+
borderColor: "#3f3f46",
|
|
13505
14151
|
borderRadius: 8,
|
|
13506
14152
|
padding: 12,
|
|
13507
14153
|
marginBottom: 8
|
|
@@ -13515,7 +14161,7 @@ var styles = StyleSheet.create({
|
|
|
13515
14161
|
width: 24,
|
|
13516
14162
|
height: 24,
|
|
13517
14163
|
borderRadius: 4,
|
|
13518
|
-
backgroundColor: "#
|
|
14164
|
+
backgroundColor: "#1e3a5f",
|
|
13519
14165
|
justifyContent: "center",
|
|
13520
14166
|
alignItems: "center",
|
|
13521
14167
|
marginRight: 8
|
|
@@ -13523,17 +14169,17 @@ var styles = StyleSheet.create({
|
|
|
13523
14169
|
rubricNumberText: {
|
|
13524
14170
|
fontSize: 12,
|
|
13525
14171
|
fontWeight: "600",
|
|
13526
|
-
color: "#
|
|
14172
|
+
color: "#3B82F6"
|
|
13527
14173
|
},
|
|
13528
14174
|
rubricTitle: {
|
|
13529
14175
|
flex: 1,
|
|
13530
14176
|
fontSize: 14,
|
|
13531
14177
|
fontWeight: "500",
|
|
13532
|
-
color: "#
|
|
14178
|
+
color: "#fafafa"
|
|
13533
14179
|
},
|
|
13534
14180
|
rubricExpected: {
|
|
13535
14181
|
fontSize: 12,
|
|
13536
|
-
color: "#
|
|
14182
|
+
color: "#71717a",
|
|
13537
14183
|
marginLeft: 32,
|
|
13538
14184
|
marginBottom: 8
|
|
13539
14185
|
},
|
|
@@ -13547,7 +14193,7 @@ var styles = StyleSheet.create({
|
|
|
13547
14193
|
paddingVertical: 8,
|
|
13548
14194
|
paddingHorizontal: 12,
|
|
13549
14195
|
borderRadius: 6,
|
|
13550
|
-
backgroundColor: "#
|
|
14196
|
+
backgroundColor: "#3f3f46",
|
|
13551
14197
|
alignItems: "center"
|
|
13552
14198
|
},
|
|
13553
14199
|
passButtonActive: {
|
|
@@ -13559,7 +14205,7 @@ var styles = StyleSheet.create({
|
|
|
13559
14205
|
passFailButtonText: {
|
|
13560
14206
|
fontSize: 12,
|
|
13561
14207
|
fontWeight: "600",
|
|
13562
|
-
color: "#
|
|
14208
|
+
color: "#a1a1aa"
|
|
13563
14209
|
},
|
|
13564
14210
|
passButtonTextActive: {
|
|
13565
14211
|
color: "#fff"
|
|
@@ -13576,17 +14222,17 @@ var styles = StyleSheet.create({
|
|
|
13576
14222
|
width: 36,
|
|
13577
14223
|
height: 36,
|
|
13578
14224
|
borderRadius: 6,
|
|
13579
|
-
backgroundColor: "#
|
|
14225
|
+
backgroundColor: "#3f3f46",
|
|
13580
14226
|
justifyContent: "center",
|
|
13581
14227
|
alignItems: "center"
|
|
13582
14228
|
},
|
|
13583
14229
|
ratingButtonActive: {
|
|
13584
|
-
backgroundColor: "#
|
|
14230
|
+
backgroundColor: "#3B82F6"
|
|
13585
14231
|
},
|
|
13586
14232
|
ratingButtonText: {
|
|
13587
14233
|
fontSize: 14,
|
|
13588
14234
|
fontWeight: "600",
|
|
13589
|
-
color: "#
|
|
14235
|
+
color: "#a1a1aa"
|
|
13590
14236
|
},
|
|
13591
14237
|
ratingButtonTextActive: {
|
|
13592
14238
|
color: "#fff"
|
|
@@ -13600,17 +14246,17 @@ var styles = StyleSheet.create({
|
|
|
13600
14246
|
},
|
|
13601
14247
|
helperText: {
|
|
13602
14248
|
fontSize: 12,
|
|
13603
|
-
color: "#
|
|
14249
|
+
color: "#71717a"
|
|
13604
14250
|
},
|
|
13605
14251
|
resetText: {
|
|
13606
14252
|
fontSize: 12,
|
|
13607
|
-
color: "#
|
|
14253
|
+
color: "#71717a"
|
|
13608
14254
|
},
|
|
13609
14255
|
// Freeform styles
|
|
13610
14256
|
freeformBox: {
|
|
13611
|
-
backgroundColor: "#
|
|
14257
|
+
backgroundColor: "#422006",
|
|
13612
14258
|
borderWidth: 1,
|
|
13613
|
-
borderColor: "#
|
|
14259
|
+
borderColor: "#a16207",
|
|
13614
14260
|
borderRadius: 8,
|
|
13615
14261
|
padding: 12,
|
|
13616
14262
|
marginTop: 8
|
|
@@ -13618,22 +14264,22 @@ var styles = StyleSheet.create({
|
|
|
13618
14264
|
freeformTitle: {
|
|
13619
14265
|
fontSize: 14,
|
|
13620
14266
|
fontWeight: "600",
|
|
13621
|
-
color: "#
|
|
14267
|
+
color: "#fbbf24",
|
|
13622
14268
|
marginBottom: 4
|
|
13623
14269
|
},
|
|
13624
14270
|
freeformText: {
|
|
13625
14271
|
fontSize: 12,
|
|
13626
|
-
color: "#
|
|
14272
|
+
color: "#fcd34d",
|
|
13627
14273
|
marginBottom: 4
|
|
13628
14274
|
},
|
|
13629
14275
|
freeformBullet: {
|
|
13630
14276
|
fontSize: 12,
|
|
13631
|
-
color: "#
|
|
14277
|
+
color: "#fcd34d",
|
|
13632
14278
|
marginLeft: 8
|
|
13633
14279
|
},
|
|
13634
14280
|
// Expected result
|
|
13635
14281
|
expectedResult: {
|
|
13636
|
-
backgroundColor: "#
|
|
14282
|
+
backgroundColor: "#14532d",
|
|
13637
14283
|
padding: 12,
|
|
13638
14284
|
borderRadius: 8,
|
|
13639
14285
|
marginTop: 12
|
|
@@ -13641,12 +14287,12 @@ var styles = StyleSheet.create({
|
|
|
13641
14287
|
expectedLabel: {
|
|
13642
14288
|
fontSize: 12,
|
|
13643
14289
|
fontWeight: "600",
|
|
13644
|
-
color: "#
|
|
14290
|
+
color: "#4ade80",
|
|
13645
14291
|
marginBottom: 4
|
|
13646
14292
|
},
|
|
13647
14293
|
expectedText: {
|
|
13648
14294
|
fontSize: 14,
|
|
13649
|
-
color: "#
|
|
14295
|
+
color: "#86efac"
|
|
13650
14296
|
},
|
|
13651
14297
|
// Action buttons
|
|
13652
14298
|
actionButtons: {
|
|
@@ -13655,7 +14301,7 @@ var styles = StyleSheet.create({
|
|
|
13655
14301
|
},
|
|
13656
14302
|
failButton: {
|
|
13657
14303
|
flex: 1,
|
|
13658
|
-
backgroundColor: "#
|
|
14304
|
+
backgroundColor: "#7f1d1d",
|
|
13659
14305
|
paddingVertical: 14,
|
|
13660
14306
|
borderRadius: 12,
|
|
13661
14307
|
alignItems: "center"
|
|
@@ -13663,7 +14309,7 @@ var styles = StyleSheet.create({
|
|
|
13663
14309
|
failButtonText: {
|
|
13664
14310
|
fontSize: 16,
|
|
13665
14311
|
fontWeight: "600",
|
|
13666
|
-
color: "#
|
|
14312
|
+
color: "#fca5a5"
|
|
13667
14313
|
},
|
|
13668
14314
|
passButton: {
|
|
13669
14315
|
flex: 1,
|
|
@@ -13685,22 +14331,22 @@ var styles = StyleSheet.create({
|
|
|
13685
14331
|
},
|
|
13686
14332
|
reportTypeButton: {
|
|
13687
14333
|
flex: 1,
|
|
13688
|
-
backgroundColor: "#
|
|
14334
|
+
backgroundColor: "#3f3f46",
|
|
13689
14335
|
paddingVertical: 10,
|
|
13690
14336
|
borderRadius: 8,
|
|
13691
14337
|
alignItems: "center"
|
|
13692
14338
|
},
|
|
13693
14339
|
reportTypeActive: {
|
|
13694
|
-
backgroundColor: "#
|
|
14340
|
+
backgroundColor: "#1e3a5f",
|
|
13695
14341
|
borderWidth: 2,
|
|
13696
|
-
borderColor: "#
|
|
14342
|
+
borderColor: "#3B82F6"
|
|
13697
14343
|
},
|
|
13698
14344
|
reportTypeText: {
|
|
13699
14345
|
fontSize: 14,
|
|
13700
|
-
color: "#
|
|
14346
|
+
color: "#a1a1aa"
|
|
13701
14347
|
},
|
|
13702
14348
|
reportTypeTextActive: {
|
|
13703
|
-
color: "#
|
|
14349
|
+
color: "#3B82F6",
|
|
13704
14350
|
fontWeight: "600"
|
|
13705
14351
|
},
|
|
13706
14352
|
severitySection: {
|
|
@@ -13709,7 +14355,7 @@ var styles = StyleSheet.create({
|
|
|
13709
14355
|
label: {
|
|
13710
14356
|
fontSize: 14,
|
|
13711
14357
|
fontWeight: "500",
|
|
13712
|
-
color: "#
|
|
14358
|
+
color: "#e4e4e7",
|
|
13713
14359
|
marginBottom: 8
|
|
13714
14360
|
},
|
|
13715
14361
|
severityButtons: {
|
|
@@ -13718,7 +14364,7 @@ var styles = StyleSheet.create({
|
|
|
13718
14364
|
},
|
|
13719
14365
|
severityButton: {
|
|
13720
14366
|
flex: 1,
|
|
13721
|
-
backgroundColor: "#
|
|
14367
|
+
backgroundColor: "#3f3f46",
|
|
13722
14368
|
paddingVertical: 8,
|
|
13723
14369
|
borderRadius: 6,
|
|
13724
14370
|
alignItems: "center"
|
|
@@ -13737,7 +14383,7 @@ var styles = StyleSheet.create({
|
|
|
13737
14383
|
},
|
|
13738
14384
|
severityText: {
|
|
13739
14385
|
fontSize: 12,
|
|
13740
|
-
color: "#
|
|
14386
|
+
color: "#a1a1aa",
|
|
13741
14387
|
textTransform: "capitalize"
|
|
13742
14388
|
},
|
|
13743
14389
|
severityTextActive: {
|
|
@@ -13748,17 +14394,17 @@ var styles = StyleSheet.create({
|
|
|
13748
14394
|
marginBottom: 16
|
|
13749
14395
|
},
|
|
13750
14396
|
textInput: {
|
|
13751
|
-
backgroundColor: "#
|
|
14397
|
+
backgroundColor: "#27272a",
|
|
13752
14398
|
borderWidth: 1,
|
|
13753
|
-
borderColor: "#
|
|
14399
|
+
borderColor: "#3f3f46",
|
|
13754
14400
|
borderRadius: 12,
|
|
13755
14401
|
padding: 12,
|
|
13756
14402
|
fontSize: 14,
|
|
13757
14403
|
minHeight: 100,
|
|
13758
|
-
color: "#
|
|
14404
|
+
color: "#fafafa"
|
|
13759
14405
|
},
|
|
13760
14406
|
submitButton: {
|
|
13761
|
-
backgroundColor: "#
|
|
14407
|
+
backgroundColor: "#3B82F6",
|
|
13762
14408
|
paddingVertical: 14,
|
|
13763
14409
|
borderRadius: 12,
|
|
13764
14410
|
alignItems: "center"
|
|
@@ -13797,16 +14443,16 @@ var styles = StyleSheet.create({
|
|
|
13797
14443
|
},
|
|
13798
14444
|
// Thread list styles
|
|
13799
14445
|
threadItem: {
|
|
13800
|
-
backgroundColor: "#
|
|
14446
|
+
backgroundColor: "#27272a",
|
|
13801
14447
|
borderRadius: 12,
|
|
13802
14448
|
padding: 12,
|
|
13803
14449
|
marginBottom: 8,
|
|
13804
14450
|
borderWidth: 1,
|
|
13805
|
-
borderColor: "#
|
|
14451
|
+
borderColor: "#3f3f46"
|
|
13806
14452
|
},
|
|
13807
14453
|
threadItemUnread: {
|
|
13808
|
-
backgroundColor: "#
|
|
13809
|
-
borderColor: "#
|
|
14454
|
+
backgroundColor: "#1e3a5f",
|
|
14455
|
+
borderColor: "#3B82F6"
|
|
13810
14456
|
},
|
|
13811
14457
|
threadHeader: {
|
|
13812
14458
|
flexDirection: "row",
|
|
@@ -13830,12 +14476,12 @@ var styles = StyleSheet.create({
|
|
|
13830
14476
|
threadSubject: {
|
|
13831
14477
|
fontSize: 14,
|
|
13832
14478
|
fontWeight: "500",
|
|
13833
|
-
color: "#
|
|
14479
|
+
color: "#e4e4e7",
|
|
13834
14480
|
flex: 1
|
|
13835
14481
|
},
|
|
13836
14482
|
threadSubjectUnread: {
|
|
13837
14483
|
fontWeight: "600",
|
|
13838
|
-
color: "#
|
|
14484
|
+
color: "#fafafa"
|
|
13839
14485
|
},
|
|
13840
14486
|
priorityDot: {
|
|
13841
14487
|
width: 8,
|
|
@@ -13845,7 +14491,7 @@ var styles = StyleSheet.create({
|
|
|
13845
14491
|
},
|
|
13846
14492
|
threadPreview: {
|
|
13847
14493
|
fontSize: 13,
|
|
13848
|
-
color: "#
|
|
14494
|
+
color: "#a1a1aa",
|
|
13849
14495
|
marginBottom: 4
|
|
13850
14496
|
},
|
|
13851
14497
|
threadMeta: {
|
|
@@ -13855,7 +14501,7 @@ var styles = StyleSheet.create({
|
|
|
13855
14501
|
},
|
|
13856
14502
|
threadMetaText: {
|
|
13857
14503
|
fontSize: 12,
|
|
13858
|
-
color: "#
|
|
14504
|
+
color: "#71717a"
|
|
13859
14505
|
},
|
|
13860
14506
|
unreadBadge: {
|
|
13861
14507
|
backgroundColor: "#3B82F6",
|
|
@@ -13870,7 +14516,7 @@ var styles = StyleSheet.create({
|
|
|
13870
14516
|
},
|
|
13871
14517
|
threadTime: {
|
|
13872
14518
|
fontSize: 12,
|
|
13873
|
-
color: "#
|
|
14519
|
+
color: "#71717a"
|
|
13874
14520
|
},
|
|
13875
14521
|
// Thread detail styles
|
|
13876
14522
|
threadDetailContainer: {
|
|
@@ -13879,7 +14525,7 @@ var styles = StyleSheet.create({
|
|
|
13879
14525
|
threadDetailHeader: {
|
|
13880
14526
|
flexDirection: "row",
|
|
13881
14527
|
alignItems: "center",
|
|
13882
|
-
backgroundColor: "#
|
|
14528
|
+
backgroundColor: "#27272a",
|
|
13883
14529
|
padding: 12,
|
|
13884
14530
|
borderRadius: 8,
|
|
13885
14531
|
marginBottom: 12
|
|
@@ -13892,7 +14538,7 @@ var styles = StyleSheet.create({
|
|
|
13892
14538
|
flex: 1,
|
|
13893
14539
|
fontSize: 15,
|
|
13894
14540
|
fontWeight: "600",
|
|
13895
|
-
color: "#
|
|
14541
|
+
color: "#fafafa"
|
|
13896
14542
|
},
|
|
13897
14543
|
loadingMessages: {
|
|
13898
14544
|
padding: 20,
|
|
@@ -13900,7 +14546,7 @@ var styles = StyleSheet.create({
|
|
|
13900
14546
|
},
|
|
13901
14547
|
loadingText: {
|
|
13902
14548
|
fontSize: 14,
|
|
13903
|
-
color: "#
|
|
14549
|
+
color: "#71717a"
|
|
13904
14550
|
},
|
|
13905
14551
|
messagesContainer: {
|
|
13906
14552
|
paddingBottom: 8
|
|
@@ -13913,26 +14559,26 @@ var styles = StyleSheet.create({
|
|
|
13913
14559
|
},
|
|
13914
14560
|
messageBubbleAdmin: {
|
|
13915
14561
|
alignSelf: "flex-start",
|
|
13916
|
-
backgroundColor: "#
|
|
14562
|
+
backgroundColor: "#27272a",
|
|
13917
14563
|
borderBottomLeftRadius: 4
|
|
13918
14564
|
},
|
|
13919
14565
|
messageBubbleTester: {
|
|
13920
14566
|
alignSelf: "flex-end",
|
|
13921
|
-
backgroundColor: "#
|
|
14567
|
+
backgroundColor: "#3B82F6",
|
|
13922
14568
|
borderBottomRightRadius: 4
|
|
13923
14569
|
},
|
|
13924
14570
|
messageSender: {
|
|
13925
14571
|
fontSize: 12,
|
|
13926
14572
|
fontWeight: "600",
|
|
13927
|
-
color: "#
|
|
14573
|
+
color: "#71717a",
|
|
13928
14574
|
marginBottom: 2
|
|
13929
14575
|
},
|
|
13930
14576
|
messageSenderTester: {
|
|
13931
|
-
color: "#
|
|
14577
|
+
color: "#93c5fd"
|
|
13932
14578
|
},
|
|
13933
14579
|
messageContent: {
|
|
13934
14580
|
fontSize: 14,
|
|
13935
|
-
color: "#
|
|
14581
|
+
color: "#fafafa",
|
|
13936
14582
|
lineHeight: 20
|
|
13937
14583
|
},
|
|
13938
14584
|
messageContentTester: {
|
|
@@ -13940,12 +14586,12 @@ var styles = StyleSheet.create({
|
|
|
13940
14586
|
},
|
|
13941
14587
|
messageTime: {
|
|
13942
14588
|
fontSize: 11,
|
|
13943
|
-
color: "#
|
|
14589
|
+
color: "#71717a",
|
|
13944
14590
|
marginTop: 4,
|
|
13945
14591
|
textAlign: "right"
|
|
13946
14592
|
},
|
|
13947
14593
|
messageTimeTester: {
|
|
13948
|
-
color: "#
|
|
14594
|
+
color: "#93c5fd"
|
|
13949
14595
|
},
|
|
13950
14596
|
// Reply composer styles
|
|
13951
14597
|
replyComposer: {
|
|
@@ -13953,24 +14599,24 @@ var styles = StyleSheet.create({
|
|
|
13953
14599
|
alignItems: "flex-end",
|
|
13954
14600
|
padding: 12,
|
|
13955
14601
|
borderTopWidth: 1,
|
|
13956
|
-
borderTopColor: "#
|
|
13957
|
-
backgroundColor: "#
|
|
14602
|
+
borderTopColor: "#27272a",
|
|
14603
|
+
backgroundColor: "#18181b"
|
|
13958
14604
|
},
|
|
13959
14605
|
replyInput: {
|
|
13960
14606
|
flex: 1,
|
|
13961
|
-
backgroundColor: "#
|
|
14607
|
+
backgroundColor: "#27272a",
|
|
13962
14608
|
borderWidth: 1,
|
|
13963
|
-
borderColor: "#
|
|
14609
|
+
borderColor: "#3f3f46",
|
|
13964
14610
|
borderRadius: 20,
|
|
13965
14611
|
paddingHorizontal: 16,
|
|
13966
14612
|
paddingVertical: 10,
|
|
13967
14613
|
fontSize: 14,
|
|
13968
|
-
color: "#
|
|
14614
|
+
color: "#fafafa",
|
|
13969
14615
|
maxHeight: 100,
|
|
13970
14616
|
marginRight: 8
|
|
13971
14617
|
},
|
|
13972
14618
|
sendButton: {
|
|
13973
|
-
backgroundColor: "#
|
|
14619
|
+
backgroundColor: "#3B82F6",
|
|
13974
14620
|
paddingHorizontal: 16,
|
|
13975
14621
|
paddingVertical: 10,
|
|
13976
14622
|
borderRadius: 20,
|
|
@@ -13978,7 +14624,7 @@ var styles = StyleSheet.create({
|
|
|
13978
14624
|
alignItems: "center"
|
|
13979
14625
|
},
|
|
13980
14626
|
sendButtonDisabled: {
|
|
13981
|
-
backgroundColor: "#
|
|
14627
|
+
backgroundColor: "#1e40af"
|
|
13982
14628
|
},
|
|
13983
14629
|
sendButtonText: {
|
|
13984
14630
|
fontSize: 14,
|
|
@@ -13990,7 +14636,7 @@ var styles = StyleSheet.create({
|
|
|
13990
14636
|
flexDirection: "row",
|
|
13991
14637
|
alignItems: "center",
|
|
13992
14638
|
justifyContent: "center",
|
|
13993
|
-
backgroundColor: "#
|
|
14639
|
+
backgroundColor: "#3B82F6",
|
|
13994
14640
|
paddingVertical: 12,
|
|
13995
14641
|
paddingHorizontal: 20,
|
|
13996
14642
|
borderRadius: 12,
|
|
@@ -14012,48 +14658,50 @@ var styles = StyleSheet.create({
|
|
|
14012
14658
|
composeTitle: {
|
|
14013
14659
|
fontSize: 20,
|
|
14014
14660
|
fontWeight: "600",
|
|
14015
|
-
color: "#
|
|
14661
|
+
color: "#fafafa",
|
|
14016
14662
|
marginBottom: 4
|
|
14017
14663
|
},
|
|
14018
14664
|
composeSubtitle: {
|
|
14019
14665
|
fontSize: 14,
|
|
14020
|
-
color: "#
|
|
14666
|
+
color: "#71717a"
|
|
14021
14667
|
},
|
|
14022
14668
|
composeForm: {
|
|
14023
|
-
backgroundColor: "#
|
|
14669
|
+
backgroundColor: "#27272a",
|
|
14024
14670
|
borderRadius: 12,
|
|
14025
|
-
padding: 16
|
|
14671
|
+
padding: 16,
|
|
14672
|
+
borderWidth: 1,
|
|
14673
|
+
borderColor: "#3f3f46"
|
|
14026
14674
|
},
|
|
14027
14675
|
composeSubjectInput: {
|
|
14028
|
-
backgroundColor: "#
|
|
14676
|
+
backgroundColor: "#18181b",
|
|
14029
14677
|
borderWidth: 1,
|
|
14030
|
-
borderColor: "#
|
|
14678
|
+
borderColor: "#3f3f46",
|
|
14031
14679
|
borderRadius: 8,
|
|
14032
14680
|
paddingHorizontal: 12,
|
|
14033
14681
|
paddingVertical: 10,
|
|
14034
14682
|
fontSize: 15,
|
|
14035
|
-
color: "#
|
|
14683
|
+
color: "#fafafa"
|
|
14036
14684
|
},
|
|
14037
14685
|
composeMessageInput: {
|
|
14038
|
-
backgroundColor: "#
|
|
14686
|
+
backgroundColor: "#18181b",
|
|
14039
14687
|
borderWidth: 1,
|
|
14040
|
-
borderColor: "#
|
|
14688
|
+
borderColor: "#3f3f46",
|
|
14041
14689
|
borderRadius: 8,
|
|
14042
14690
|
paddingHorizontal: 12,
|
|
14043
14691
|
paddingVertical: 10,
|
|
14044
14692
|
fontSize: 15,
|
|
14045
|
-
color: "#
|
|
14693
|
+
color: "#fafafa",
|
|
14046
14694
|
minHeight: 120
|
|
14047
14695
|
},
|
|
14048
14696
|
composeSendButton: {
|
|
14049
|
-
backgroundColor: "#
|
|
14697
|
+
backgroundColor: "#3B82F6",
|
|
14050
14698
|
paddingVertical: 14,
|
|
14051
14699
|
borderRadius: 12,
|
|
14052
14700
|
alignItems: "center",
|
|
14053
14701
|
marginTop: 20
|
|
14054
14702
|
},
|
|
14055
14703
|
composeSendButtonDisabled: {
|
|
14056
|
-
backgroundColor: "#
|
|
14704
|
+
backgroundColor: "#1e40af"
|
|
14057
14705
|
},
|
|
14058
14706
|
composeSendButtonText: {
|
|
14059
14707
|
fontSize: 16,
|
|
@@ -14062,17 +14710,19 @@ var styles = StyleSheet.create({
|
|
|
14062
14710
|
},
|
|
14063
14711
|
// Profile styles
|
|
14064
14712
|
profileCard: {
|
|
14065
|
-
backgroundColor: "#
|
|
14713
|
+
backgroundColor: "#27272a",
|
|
14066
14714
|
borderRadius: 16,
|
|
14067
14715
|
padding: 24,
|
|
14068
14716
|
alignItems: "center",
|
|
14069
|
-
marginBottom: 16
|
|
14717
|
+
marginBottom: 16,
|
|
14718
|
+
borderWidth: 1,
|
|
14719
|
+
borderColor: "#3f3f46"
|
|
14070
14720
|
},
|
|
14071
14721
|
avatarCircle: {
|
|
14072
14722
|
width: 72,
|
|
14073
14723
|
height: 72,
|
|
14074
14724
|
borderRadius: 36,
|
|
14075
|
-
backgroundColor: "#
|
|
14725
|
+
backgroundColor: "#3B82F6",
|
|
14076
14726
|
justifyContent: "center",
|
|
14077
14727
|
alignItems: "center",
|
|
14078
14728
|
marginBottom: 12
|
|
@@ -14085,12 +14735,12 @@ var styles = StyleSheet.create({
|
|
|
14085
14735
|
profileName: {
|
|
14086
14736
|
fontSize: 20,
|
|
14087
14737
|
fontWeight: "600",
|
|
14088
|
-
color: "#
|
|
14738
|
+
color: "#fafafa",
|
|
14089
14739
|
marginBottom: 4
|
|
14090
14740
|
},
|
|
14091
14741
|
profileEmail: {
|
|
14092
14742
|
fontSize: 14,
|
|
14093
|
-
color: "#
|
|
14743
|
+
color: "#71717a",
|
|
14094
14744
|
marginBottom: 16
|
|
14095
14745
|
},
|
|
14096
14746
|
profileStats: {
|
|
@@ -14104,35 +14754,37 @@ var styles = StyleSheet.create({
|
|
|
14104
14754
|
profileStatValue: {
|
|
14105
14755
|
fontSize: 24,
|
|
14106
14756
|
fontWeight: "700",
|
|
14107
|
-
color: "#
|
|
14757
|
+
color: "#3B82F6"
|
|
14108
14758
|
},
|
|
14109
14759
|
profileStatLabel: {
|
|
14110
14760
|
fontSize: 12,
|
|
14111
|
-
color: "#
|
|
14761
|
+
color: "#71717a",
|
|
14112
14762
|
marginTop: 2
|
|
14113
14763
|
},
|
|
14114
14764
|
profileStatDivider: {
|
|
14115
14765
|
width: 1,
|
|
14116
14766
|
height: 32,
|
|
14117
|
-
backgroundColor: "#
|
|
14767
|
+
backgroundColor: "#3f3f46"
|
|
14118
14768
|
},
|
|
14119
14769
|
profileInfoSection: {
|
|
14120
|
-
backgroundColor: "#
|
|
14770
|
+
backgroundColor: "#27272a",
|
|
14121
14771
|
borderRadius: 12,
|
|
14122
14772
|
padding: 16,
|
|
14123
|
-
marginBottom: 12
|
|
14773
|
+
marginBottom: 12,
|
|
14774
|
+
borderWidth: 1,
|
|
14775
|
+
borderColor: "#3f3f46"
|
|
14124
14776
|
},
|
|
14125
14777
|
profileInfoLabel: {
|
|
14126
14778
|
fontSize: 12,
|
|
14127
14779
|
fontWeight: "600",
|
|
14128
|
-
color: "#
|
|
14780
|
+
color: "#71717a",
|
|
14129
14781
|
marginBottom: 8,
|
|
14130
14782
|
textTransform: "uppercase",
|
|
14131
14783
|
letterSpacing: 0.5
|
|
14132
14784
|
},
|
|
14133
14785
|
profileInfoValue: {
|
|
14134
14786
|
fontSize: 14,
|
|
14135
|
-
color: "#
|
|
14787
|
+
color: "#e4e4e7",
|
|
14136
14788
|
marginBottom: 4
|
|
14137
14789
|
},
|
|
14138
14790
|
platformTags: {
|
|
@@ -14141,18 +14793,18 @@ var styles = StyleSheet.create({
|
|
|
14141
14793
|
gap: 8
|
|
14142
14794
|
},
|
|
14143
14795
|
platformTag: {
|
|
14144
|
-
backgroundColor: "#
|
|
14796
|
+
backgroundColor: "#1e3a5f",
|
|
14145
14797
|
paddingHorizontal: 12,
|
|
14146
14798
|
paddingVertical: 6,
|
|
14147
14799
|
borderRadius: 16
|
|
14148
14800
|
},
|
|
14149
14801
|
platformTagText: {
|
|
14150
14802
|
fontSize: 13,
|
|
14151
|
-
color: "#
|
|
14803
|
+
color: "#60a5fa",
|
|
14152
14804
|
fontWeight: "500"
|
|
14153
14805
|
},
|
|
14154
14806
|
editProfileButton: {
|
|
14155
|
-
backgroundColor: "#
|
|
14807
|
+
backgroundColor: "#3B82F6",
|
|
14156
14808
|
paddingVertical: 14,
|
|
14157
14809
|
borderRadius: 12,
|
|
14158
14810
|
alignItems: "center",
|
|
@@ -14173,48 +14825,48 @@ var styles = StyleSheet.create({
|
|
|
14173
14825
|
profileEditTitle: {
|
|
14174
14826
|
fontSize: 20,
|
|
14175
14827
|
fontWeight: "600",
|
|
14176
|
-
color: "#
|
|
14828
|
+
color: "#fafafa"
|
|
14177
14829
|
},
|
|
14178
14830
|
cancelText: {
|
|
14179
14831
|
fontSize: 14,
|
|
14180
|
-
color: "#
|
|
14832
|
+
color: "#71717a"
|
|
14181
14833
|
},
|
|
14182
14834
|
profileSection: {
|
|
14183
14835
|
marginBottom: 20
|
|
14184
14836
|
},
|
|
14185
14837
|
profileInput: {
|
|
14186
|
-
backgroundColor: "#
|
|
14838
|
+
backgroundColor: "#27272a",
|
|
14187
14839
|
borderWidth: 1,
|
|
14188
|
-
borderColor: "#
|
|
14840
|
+
borderColor: "#3f3f46",
|
|
14189
14841
|
borderRadius: 10,
|
|
14190
14842
|
paddingHorizontal: 14,
|
|
14191
14843
|
paddingVertical: 12,
|
|
14192
14844
|
fontSize: 15,
|
|
14193
|
-
color: "#
|
|
14845
|
+
color: "#fafafa"
|
|
14194
14846
|
},
|
|
14195
14847
|
profileReadOnly: {
|
|
14196
|
-
backgroundColor: "#
|
|
14848
|
+
backgroundColor: "#27272a",
|
|
14197
14849
|
borderRadius: 10,
|
|
14198
14850
|
padding: 14
|
|
14199
14851
|
},
|
|
14200
14852
|
profileReadOnlyText: {
|
|
14201
14853
|
fontSize: 15,
|
|
14202
|
-
color: "#
|
|
14854
|
+
color: "#a1a1aa"
|
|
14203
14855
|
},
|
|
14204
14856
|
profileReadOnlyHint: {
|
|
14205
14857
|
fontSize: 12,
|
|
14206
|
-
color: "#
|
|
14858
|
+
color: "#52525b",
|
|
14207
14859
|
marginTop: 4
|
|
14208
14860
|
},
|
|
14209
14861
|
profileHint: {
|
|
14210
14862
|
fontSize: 13,
|
|
14211
|
-
color: "#
|
|
14863
|
+
color: "#71717a",
|
|
14212
14864
|
marginBottom: 12
|
|
14213
14865
|
},
|
|
14214
14866
|
emailChip: {
|
|
14215
14867
|
flexDirection: "row",
|
|
14216
14868
|
alignItems: "center",
|
|
14217
|
-
backgroundColor: "#
|
|
14869
|
+
backgroundColor: "#1e3a5f",
|
|
14218
14870
|
paddingHorizontal: 12,
|
|
14219
14871
|
paddingVertical: 8,
|
|
14220
14872
|
borderRadius: 20,
|
|
@@ -14223,11 +14875,11 @@ var styles = StyleSheet.create({
|
|
|
14223
14875
|
emailChipText: {
|
|
14224
14876
|
flex: 1,
|
|
14225
14877
|
fontSize: 14,
|
|
14226
|
-
color: "#
|
|
14878
|
+
color: "#60a5fa"
|
|
14227
14879
|
},
|
|
14228
14880
|
emailChipRemove: {
|
|
14229
14881
|
fontSize: 14,
|
|
14230
|
-
color: "#
|
|
14882
|
+
color: "#93c5fd",
|
|
14231
14883
|
fontWeight: "600",
|
|
14232
14884
|
marginLeft: 8
|
|
14233
14885
|
},
|
|
@@ -14237,23 +14889,23 @@ var styles = StyleSheet.create({
|
|
|
14237
14889
|
},
|
|
14238
14890
|
addEmailInput: {
|
|
14239
14891
|
flex: 1,
|
|
14240
|
-
backgroundColor: "#
|
|
14892
|
+
backgroundColor: "#27272a",
|
|
14241
14893
|
borderWidth: 1,
|
|
14242
|
-
borderColor: "#
|
|
14894
|
+
borderColor: "#3f3f46",
|
|
14243
14895
|
borderRadius: 10,
|
|
14244
14896
|
paddingHorizontal: 14,
|
|
14245
14897
|
paddingVertical: 10,
|
|
14246
14898
|
fontSize: 14,
|
|
14247
|
-
color: "#
|
|
14899
|
+
color: "#fafafa"
|
|
14248
14900
|
},
|
|
14249
14901
|
addEmailButton: {
|
|
14250
|
-
backgroundColor: "#
|
|
14902
|
+
backgroundColor: "#3B82F6",
|
|
14251
14903
|
paddingHorizontal: 16,
|
|
14252
14904
|
borderRadius: 10,
|
|
14253
14905
|
justifyContent: "center"
|
|
14254
14906
|
},
|
|
14255
14907
|
addEmailButtonDisabled: {
|
|
14256
|
-
backgroundColor: "#
|
|
14908
|
+
backgroundColor: "#1e40af"
|
|
14257
14909
|
},
|
|
14258
14910
|
addEmailButtonText: {
|
|
14259
14911
|
fontSize: 14,
|
|
@@ -14266,7 +14918,7 @@ var styles = StyleSheet.create({
|
|
|
14266
14918
|
},
|
|
14267
14919
|
platformButton: {
|
|
14268
14920
|
flex: 1,
|
|
14269
|
-
backgroundColor: "#
|
|
14921
|
+
backgroundColor: "#3f3f46",
|
|
14270
14922
|
paddingVertical: 12,
|
|
14271
14923
|
borderRadius: 10,
|
|
14272
14924
|
alignItems: "center",
|
|
@@ -14274,16 +14926,16 @@ var styles = StyleSheet.create({
|
|
|
14274
14926
|
borderColor: "transparent"
|
|
14275
14927
|
},
|
|
14276
14928
|
platformButtonActive: {
|
|
14277
|
-
backgroundColor: "#
|
|
14278
|
-
borderColor: "#
|
|
14929
|
+
backgroundColor: "#1e3a5f",
|
|
14930
|
+
borderColor: "#3B82F6"
|
|
14279
14931
|
},
|
|
14280
14932
|
platformButtonText: {
|
|
14281
14933
|
fontSize: 13,
|
|
14282
|
-
color: "#
|
|
14934
|
+
color: "#a1a1aa",
|
|
14283
14935
|
fontWeight: "500"
|
|
14284
14936
|
},
|
|
14285
14937
|
platformButtonTextActive: {
|
|
14286
|
-
color: "#
|
|
14938
|
+
color: "#3B82F6"
|
|
14287
14939
|
},
|
|
14288
14940
|
saveProfileButton: {
|
|
14289
14941
|
backgroundColor: "#16A34A",
|
|
@@ -14307,7 +14959,7 @@ var styles = StyleSheet.create({
|
|
|
14307
14959
|
left: 0,
|
|
14308
14960
|
right: 0,
|
|
14309
14961
|
bottom: 0,
|
|
14310
|
-
backgroundColor: "#
|
|
14962
|
+
backgroundColor: "#18181b",
|
|
14311
14963
|
zIndex: 100
|
|
14312
14964
|
},
|
|
14313
14965
|
profileOverlayContent: {
|
|
@@ -14316,9 +14968,9 @@ var styles = StyleSheet.create({
|
|
|
14316
14968
|
},
|
|
14317
14969
|
profileOverlayFooter: {
|
|
14318
14970
|
borderTopWidth: 1,
|
|
14319
|
-
borderTopColor: "#
|
|
14971
|
+
borderTopColor: "#27272a",
|
|
14320
14972
|
padding: 12,
|
|
14321
|
-
backgroundColor: "#
|
|
14973
|
+
backgroundColor: "#09090b"
|
|
14322
14974
|
},
|
|
14323
14975
|
closeProfileButton: {
|
|
14324
14976
|
paddingVertical: 8,
|
|
@@ -14327,7 +14979,7 @@ var styles = StyleSheet.create({
|
|
|
14327
14979
|
closeProfileButtonText: {
|
|
14328
14980
|
fontSize: 14,
|
|
14329
14981
|
fontWeight: "500",
|
|
14330
|
-
color: "#
|
|
14982
|
+
color: "#3B82F6"
|
|
14331
14983
|
}
|
|
14332
14984
|
});
|
|
14333
14985
|
export {
|