fix: show per-word colors in grid table instead of whole-cell coloring
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 38s
CI / test-go-edu-search (push) Successful in 27s
CI / test-python-klausur (push) Failing after 2m1s
CI / test-python-agent-core (push) Successful in 16s
CI / test-nodejs-website (push) Successful in 19s
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 38s
CI / test-go-edu-search (push) Successful in 27s
CI / test-python-klausur (push) Failing after 2m1s
CI / test-python-agent-core (push) Successful in 16s
CI / test-nodejs-website (push) Successful in 19s
When a cell has colored words (red !, blue phonetics), render each word as a separate span with its own color instead of coloring the entire input text with the first non-black color found. Switches to editable input on cell selection (click). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -131,6 +131,9 @@ export function GridTable({
|
|||||||
const isBold = col.bold || cell?.is_bold
|
const isBold = col.bold || cell?.is_bold
|
||||||
const isLowConf = cell && cell.confidence > 0 && cell.confidence < 60
|
const isLowConf = cell && cell.confidence > 0 && cell.confidence < 60
|
||||||
const cellColor = getCellColor(cell)
|
const cellColor = getCellColor(cell)
|
||||||
|
const hasColoredWords = cell?.word_boxes?.some(
|
||||||
|
(wb) => wb.color_name && wb.color_name !== 'black',
|
||||||
|
) ?? false
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<td
|
<td
|
||||||
@@ -147,6 +150,32 @@ export function GridTable({
|
|||||||
title={`Farbe: ${cell?.word_boxes?.find(wb => wb.color_name !== 'black')?.color_name}`}
|
title={`Farbe: ${cell?.word_boxes?.find(wb => wb.color_name !== 'black')?.color_name}`}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
{/* Per-word colored display when not editing */}
|
||||||
|
{hasColoredWords && !isSelected ? (
|
||||||
|
<div
|
||||||
|
className={`w-full px-2 py-1.5 cursor-text truncate ${
|
||||||
|
isBold ? 'font-bold' : 'font-normal'
|
||||||
|
} ${row.is_header ? 'text-base' : 'text-sm'}`}
|
||||||
|
onClick={() => {
|
||||||
|
onSelectCell(cellId)
|
||||||
|
setTimeout(() => document.getElementById(`cell-${cellId}`)?.focus(), 0)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{cell!.word_boxes!.map((wb, i) => (
|
||||||
|
<span
|
||||||
|
key={i}
|
||||||
|
style={
|
||||||
|
wb.color_name && wb.color_name !== 'black'
|
||||||
|
? { color: wb.color }
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{wb.text}
|
||||||
|
{i < cell!.word_boxes!.length - 1 ? ' ' : ''}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
<input
|
<input
|
||||||
id={`cell-${cellId}`}
|
id={`cell-${cellId}`}
|
||||||
type="text"
|
type="text"
|
||||||
@@ -159,9 +188,9 @@ export function GridTable({
|
|||||||
className={`w-full px-2 py-1.5 bg-transparent border-0 outline-none ${
|
className={`w-full px-2 py-1.5 bg-transparent border-0 outline-none ${
|
||||||
isBold ? 'font-bold' : 'font-normal'
|
isBold ? 'font-bold' : 'font-normal'
|
||||||
} ${row.is_header ? 'text-base' : 'text-sm'}`}
|
} ${row.is_header ? 'text-base' : 'text-sm'}`}
|
||||||
style={cellColor ? { color: cellColor } : undefined}
|
|
||||||
spellCheck={false}
|
spellCheck={false}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user