You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Text box editing: Fixed double-click to enter text box edit mode. The root cause was an infinite recursion in pane update cycles (show() → update() → show())
that crashed the event chain, plus a focus ordering issue where setFocus(textBox) was immediately undone by selectInlineElement() calling setFocus(null). Both
issues resolved in TextBoxPane, ImagePane, TablePane, and HyperlinkPane.
PDF image export: Images now render correctly in PDF exports. Previously, SVG and other non-JPEG/PNG formats silently fell back to placeholder rectangles. The
PDF generator now converts unsupported formats to PNG via canvas before embedding.
Table/text box formatting round-trip: Fixed formatting runs in table cells and text boxes being deserialized as single-character entries instead of ranges. A
bold word in a table cell now correctly survives export/import (previously only the first character retained formatting).
Formatting consistency: Fixed getFormattingAt() to merge overrides with defaults, preventing false run boundaries from inconsistent optional properties
(undefined vs 'normal').
Demo error: Removed reference to non-existent updateTableTools function that was causing console errors on every selection change.
Document Size Optimization
Run-based formatting compression: Body text, table cells, and text boxes now all use a shared getCompressedRuns() method that only serializes formatting at
change boundaries, eliminating per-character redundancy.
Table cell default omission: Cell properties (borders, padding, background, font, alignment, spans) are omitted from export when they match table defaults. An
empty cell now serializes to just {} instead of ~250 bytes of redundant defaults.
Row/cell ID removal: Internal row and cell IDs are no longer exported since there are no cross-references in the file format. IDs are regenerated on import.
Old exports with IDs remain backward-compatible.
Net result: A 3×3 empty table dropped from ~15KB to ~2KB. Empty documents remain at ~455 bytes.
Configurable Logging
Logger utility: New centralized Logger with log, warn, and error methods. log/warn only output when enabled; error always outputs.
Editor option: enableLogging option on EditorOptions (default: false) and runtime editor.setLogging(enabled) API.
Consistent prefixing: All library logs use [pc-editor:ClassName] format for easy filtering. Demo logs use [Editor Event]/[Demo] prefixes.
API call tracing: 33 public PCEditor methods now log their invocations when logging is enabled.
Pane Layout Improvements
Flexible spacer columns: All pane rows, button groups, and inline form groups include a zero-width ::after spacer that absorbs extra horizontal space, keeping
controls at their natural width when the sidebar is widened.
Minimum pane width: All panes share a consistent minimum width (--pc-pane-min-width: 220px).
Select dropdown max width: Combo dropdowns have a max width (--pc-pane-select-max-width: 200px) preventing infinite horizontal stretch.
Document Settings pane: Margin controls use a 5-column grid (label, edit, label, edit, stretch) with right-aligned colon labels. Margins apply on blur instead
of via an Apply button. Page Size and Orientation fields use a matching label-value grid layout.
Document Info pane: Converted to the same right-aligned colon label grid layout.
Table Row Loops
Unified repeating section API: createRepeatingSection() now detects when a table is being edited and automatically creates a row loop on the focused cell's
row, instead of requiring a separate API.
Table pane integration: Added "Row Loop" section to the Table pane with an array field input and Create Row Loop button.
Demo App Enhancements
Resizable sidebar: The side panel can now be dragged horizontally to test pane layout at different widths.
Logging toggle: View menu item to toggle console logging on/off (demo defaults to on).
Export round-trip test: View menu item opens a modal that exports the document, re-imports it, exports again, and displays byte sizes and difference to verify
serialization fidelity.