// DynText —— 动态 CJK 文本的排版安全包装。
//
// 聚珍（Juzhen）shim 会把含 CJK 的文本节点 charify 拆成多个 DOM 节点来做中西间距 /
// 标点对齐。当这段文本**就地更新**（React 改写同一个文本节点、元素本身仍挂载）时，
// shim 先前拆出的旧碎片成了 React 不再追踪的兄弟节点残留下来，每更新一次就累积一个
// 多余字——典型如「发送到 X」切换设备后前面多出来的「到」，或每秒 tick 的相对时间。
//
// 解法：用 key=文本内容。内容一变，React 就把旧 span（连同里面的 shim 碎片）整体卸载、
// 挂载一个全新的 span，shim 再对新节点处理一次。既消除累积，又**保留**中西自动间距
// （不像 data-jz-skip 那样把整段排版关掉）。代价是内容变化时该 span 会重挂，但只是
// 一截短文本、成本可忽略。
//
// 仅用于会就地变化的动态 CJK chrome（状态文案 / 计数 / 相对时间 / 速度 / 设备名等）；
// 静态一次性文本不会累积，无需包。children 限定为 string —— key 必须是稳定可比较的
// 原始值，且「内容变＝key 变」正是触发重挂的依据。
export function DynText(props: { children: string })
{
    return <span key={props.children}>{props.children}</span>;
}
