feature: Shared UX Primitives
CI / backend (push) Successful in 6m16s
CI / frontend (push) Failing after 1m4s

This commit is contained in:
2026-08-12 03:57:43 +08:00
parent 56e100a495
commit 9811f2a2ed
26 changed files with 1259 additions and 183 deletions
@@ -1,17 +1,55 @@
import { type ComputedRef } from 'vue'
import type { OcrConfidenceMap } from '../types'
/** Design-doc §14: 95100% high, 8094% medium, <80% low */
export type OcrConfidenceLevel = 'high' | 'medium' | 'low'
export const OCR_HIGH_THRESHOLD = 0.95
export const OCR_MEDIUM_THRESHOLD = 0.8
export function confidenceToLevel(confidence: number): OcrConfidenceLevel {
if (confidence >= OCR_HIGH_THRESHOLD) return 'high'
if (confidence >= OCR_MEDIUM_THRESHOLD) return 'medium'
return 'low'
}
export function formatOcrBadgeLabel(confidence: number): string {
const pct = Math.round(confidence * 100)
return `OCR ${pct}%`
}
export function useOcrFieldConfidence(
ocrConfidence: ComputedRef<OcrConfidenceMap | null | undefined>,
) {
function getFieldConfidence(fieldPath: string): number | undefined {
if (!ocrConfidence.value) return undefined
return ocrConfidence.value.fieldConfidences[fieldPath]
}
function fieldConfidenceLevel(fieldPath: string): OcrConfidenceLevel | null {
const confidence = getFieldConfidence(fieldPath)
if (confidence === undefined) return null
return confidenceToLevel(confidence)
}
function fieldConfidenceLabel(fieldPath: string): string | null {
const confidence = getFieldConfidence(fieldPath)
if (confidence === undefined) return null
return formatOcrBadgeLabel(confidence)
}
function fieldConfidenceClass(fieldPath: string): string {
if (!ocrConfidence.value) return ''
const confidence = ocrConfidence.value.fieldConfidences[fieldPath]
if (confidence === undefined) return ''
if (confidence >= 0.85) return 'ocr-high'
if (confidence >= 0.7) return 'ocr-medium'
const level = fieldConfidenceLevel(fieldPath)
if (!level) return ''
if (level === 'high') return 'ocr-high'
if (level === 'medium') return 'ocr-medium'
return 'ocr-low'
}
return { fieldConfidenceClass }
return {
getFieldConfidence,
fieldConfidenceLevel,
fieldConfidenceLabel,
fieldConfidenceClass,
}
}