Editable table control (add_table / TableView) — a Tabulator-backed
tabular-data control whose columns and initial rows are defined by the
backend. Users can edit cells and optionally append rows and columns; each
change is reported back via control:cell_change / control:row_add /
control:column_add to distinct async handlers (on_cell_change /
on_row_add / on_column_add), and the grid can be refreshed in place with
set_control_value.
HTML export drops KaTeX math texture labels — standalone HTML snapshots
and figures did not load html2canvas, so $...$ / $$...$$ texture labels
silently failed to render (plain-text labels still worked). The export
templates now load html2canvas alongside KaTeX, and createTextureLabel()
falls back to plain text when html2canvas is unavailable instead of
dropping the label.
Default 3D camera moved closer to the origin — the default perspective
camera position changed from (8, 6, 10) to (6, 4.5, 7.5) (three-quarters
of the original distance), applied to both the live viewer and HTML exports.
Unified, tighter camera auto-fit — extracted a single shared
fit_camera.jsfitCamera() used by both the live viewer and all HTML
exports (snapshot, figure, animated). In 3D it now excludes the axes/grid
reference frame, always includes the origin, fits the content's bounding
sphere within the vertical FOV (replacing the old maxDim * 1.5 + 2), and
keeps the camera looking at the origin. When there is no content it falls
back to the grid/axes, and to a [-5, 5] cube for an empty scene.