All files / web/src/components/toys/euclid/proof ProofInstruction.tsx

0% Statements 0/42
0% Branches 0/1
0% Functions 0/1
0% Lines 0/42

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                                                                                     
'use client'

import type React from 'react'
import { MarkedText } from '@/lib/character/MarkedText'
import { stripEntityMarkers } from '@/lib/character/parseEntityMarkers'
import { EUCLID_ENTITY_MARKERS } from '../euclidEntityMarkers'
import type { EuclidEntityRef } from '../chat/parseGeometricEntities'

interface ProofInstructionProps {
  text: string
  renderEntity?: (entity: EuclidEntityRef, displayText: string, index: number) => React.ReactNode
  onHighlight?: (entity: EuclidEntityRef | null) => void
  style?: React.CSSProperties
}

/**
 * Renders instruction text with optional entity markup highlighting.
 *
 * When `renderEntity` is provided, renders via MarkedText with EUCLID_ENTITY_MARKERS.
 * When absent, strips markers and renders plain text.
 */
export function ProofInstruction({
  text,
  renderEntity,
  onHighlight,
  style,
}: ProofInstructionProps) {
  if (!renderEntity) {
    return <span style={style}>{stripEntityMarkers(text, EUCLID_ENTITY_MARKERS)}</span>
  }

  return (
    <span style={style}>
      <MarkedText
        text={text}
        markers={EUCLID_ENTITY_MARKERS}
        onHighlight={onHighlight ?? (() => {})}
        renderEntity={renderEntity}
      />
    </span>
  )
}