renderItems = (inputText) => {
const _width = Math.min(600, width);
const parts = parseInput(inputText);
const n = parts.length;
const dy = 14;
const baseStyle = "font-family: Monospace; fill: #1FA774";
const styleLeft = `text-anchor: end;${baseStyle}`;
const renderLeft = (item) => {
const [partA, partB] = item;
const shared = getSharedItem(partA, partB);
const chars = partA.map((c) =>
c === shared
? svg`<tspan fill="#FF6163" font-weight="bold">${c}</tspan>`
: c
);
return svg`<text x="-5" style="${styleLeft}">${chars}</text>`;
};
const renderRight = (item) => {
const [partA, partB] = item;
const shared = getSharedItem(partA, partB);
const chars = partA.map((c) =>
c === shared
? svg`<tspan fill="#FF6163" font-weight="bold">${c}</tspan>`
: c
);
return svg`<text x="5" style="${baseStyle}">${chars}</text>`;
};
return svg`
<svg width=${_width} height=${n * dy}>
<g transform="translate(${_width / 2}, 0)">
${parts.map(
(item, itemIndex) => svg`
<g transform="translate(0, ${(1 + itemIndex) * dy})">
${renderLeft(item)}
${renderRight(item)}
</g>`
)}
</g>
</svg>
`;
}