fix(security): XSS, CSS injection, escaping, cache limits, stale positions (0.42.1)
Security:
- Chart dialog: escape all Yjs-derived values in HTML attributes (range,
title, axis labels) to prevent stored XSS via malicious collaborator
- CF rendering: validate barColor/bgColor/textColor against hex regex
before injecting into style attributes (prevents CSS injection)
- KaTeX CSS: load from Vite-bundled asset via ?url import instead of
jsdelivr CDN (eliminates supply-chain/SRI risk)
Bugs:
- footnote-footer escapeAttr: fix replacement ordering (& must be first)
- presence-sidebar escapeAttr: add missing & escape
- suggestions panel: re-extract positions before individual accept/reject
to handle concurrent collaborative edits shifting ranges
- content search: cap cache at 50 documents to prevent unbounded growth
- math-block: clear debounce timer when closing editor
Performance:
- Grid CF rendering: single-pass cell value collection shared by
colorScale, dataBar, and iconSet (was 3x redundant O(rows*cols))
Cleanup:
- Remove dead fromIdx variable in slide thumbnail dragover handler
Closes #632, #633, #634, #635, #636, #637