import { computed, handler, NAME, pattern, Stream, type TrustedActionWriteWithIntegrity, UI, type VNode, Writable, } from "commonfabric"; export const TRUSTED_PROVENANCE_REVIEW_SURFACE = "TrustedProvenanceReviewSurface"; export const TRUSTED_PROVENANCE_RENDERED_EVIDENCE = "TrustedProvenanceRenderedEvidence"; const REVIEW_PROVENANCE_ACTION = "TrustedReviewProvenance"; export const reviewTrustedProvenance = handler< void, { provenanceText: Writable; reviewedProvenance: Writable; } >((_, { provenanceText, reviewedProvenance }) => { const provenance = provenanceText.get().trim(); reviewedProvenance.set( provenance ? `Reviewed provenance: ${provenance}` : "", ); }); export interface TrustedProvenanceReviewSurfaceInput { provenanceText: Writable; reviewedProvenance: Writable; } export interface TrustedProvenanceReviewSurfaceOutput { [NAME]: string; [UI]: VNode; reviewedProvenance: TrustedActionWriteWithIntegrity< string, typeof reviewTrustedProvenance, typeof REVIEW_PROVENANCE_ACTION, typeof TRUSTED_PROVENANCE_REVIEW_SURFACE, [ typeof TRUSTED_PROVENANCE_REVIEW_SURFACE, typeof TRUSTED_PROVENANCE_RENDERED_EVIDENCE, ] >; reviewProvenance: Stream; } export const TrustedProvenanceReviewSurface = pattern< TrustedProvenanceReviewSurfaceInput, TrustedProvenanceReviewSurfaceOutput >(({ provenanceText, reviewedProvenance }) => { const reviewProvenance = reviewTrustedProvenance({ provenanceText, reviewedProvenance, }); return { [NAME]: computed(() => "Trusted Provenance Review Surface"), [UI]: ( Trusted provenance review Review the provenance disclosure before reusing the content. {TRUSTED_PROVENANCE_RENDERED_EVIDENCE} {provenanceText} Accept provenance Reviewed provenance result
{reviewedProvenance}
), reviewedProvenance, reviewProvenance, }; });