Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 24x 24x 1x 13x 13x 13x 1x 6x 4x 4x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 9x 9x 9x | /**
* Testimonial Verification Logic
*
* Handles verification levels and badge display for testimonials
*/
export type TestimonialVerificationType =
| 'unverified'
| 'email_verified'
| 'identity_linked'
| 'domain_verified'
| 'work_verified';
export interface VerificationLevel {
type: TestimonialVerificationType;
label: string;
description: string;
color: string;
bgColor: string;
borderColor: string;
priority: number;
}
export const VERIFICATION_LEVELS: Record<TestimonialVerificationType, VerificationLevel> = {
unverified: {
type: 'unverified',
label: 'Unverified',
description: 'This testimonial has not been verified',
color: 'text-gray-500',
bgColor: 'bg-gray-100 dark:bg-gray-800',
borderColor: 'border-gray-200 dark:border-gray-700',
priority: 0,
},
email_verified: {
type: 'email_verified',
label: 'Email Verified',
description: 'Author verified their email address',
color: 'text-blue-600',
bgColor: 'bg-blue-50 dark:bg-blue-950/30',
borderColor: 'border-blue-200 dark:border-blue-800',
priority: 1,
},
identity_linked: {
type: 'identity_linked',
label: 'Identity Linked',
description: 'Author is a verified ProofID user',
color: 'text-purple-600',
bgColor: 'bg-purple-50 dark:bg-purple-950/30',
borderColor: 'border-purple-200 dark:border-purple-800',
priority: 2,
},
domain_verified: {
type: 'domain_verified',
label: 'Domain Verified',
description: 'Author verified through company email domain',
color: 'text-emerald-600',
bgColor: 'bg-emerald-50 dark:bg-emerald-950/30',
borderColor: 'border-emerald-200 dark:border-emerald-800',
priority: 3,
},
work_verified: {
type: 'work_verified',
label: 'Work Verified',
description: 'Author verified through work relationship',
color: 'text-amber-600',
bgColor: 'bg-amber-50 dark:bg-amber-950/30',
borderColor: 'border-amber-200 dark:border-amber-800',
priority: 4,
},
};
/**
* Get verification level info
*/
export function getVerificationLevel(type: string): VerificationLevel {
return VERIFICATION_LEVELS[type as TestimonialVerificationType] || VERIFICATION_LEVELS.unverified;
}
/**
* Check if verification is meaningful (higher than unverified)
*/
export function isVerified(type: string): boolean {
const level = getVerificationLevel(type);
return level.priority > 0;
}
/**
* Get verification badge text
*/
export function getVerificationBadgeText(type: string): string | null {
if (!isVerified(type)) return null;
return getVerificationLevel(type).label;
}
/**
* Relationship context options
*/
export const RELATIONSHIP_CONTEXTS = [
{ value: 'client', label: 'Client' },
{ value: 'colleague', label: 'Colleague' },
{ value: 'manager', label: 'Manager' },
{ value: 'direct_report', label: 'Direct Report' },
{ value: 'vendor', label: 'Vendor/Partner' },
{ value: 'student', label: 'Student' },
{ value: 'mentor', label: 'Mentor' },
{ value: 'other', label: 'Other' },
] as const;
export type RelationshipContext = (typeof RELATIONSHIP_CONTEXTS)[number]['value'];
export function getRelationshipLabel(context: string): string {
const found = RELATIONSHIP_CONTEXTS.find((r) => r.value === context);
return found?.label || context;
}
|