flutter_rhwp 2026.6.2
flutter_rhwp: ^2026.6.2 copied to clipboard
Flutter bindings and widgets for rhwp.
2026-06-02 (2026.6.2) #
- Updated plugin release metadata for the
2026.6.2release. - Added Flutter-native dirty-state reporting with
onDirtyChanged, including clean-state callbacks after successful HWP/HWPX save exports. - Exposed Flutter-native dirty state through
RhwpEditorController.dirtyandmarkClean()for host-driven save/discard flows. - Added a Flutter-native status-bar modified indicator backed by the shared dirty state.
- Added a Flutter-native
onUnsavedChangesguard before New/Open/Close file actions proceed with dirty documents. - Updated the example save flow so cancelling a desktop save dialog keeps the document dirty and cancels pending file actions.
- Started
CHANGELOG.mddate-based sections so future work is grouped by work date as well as package version. - Added
docs/ROADMAP.mdanddocs/TODO.mdto track remaining native-editor, fidelity, platform, and release work. - Added
docs/API_SPEC.mdto map editor toolbar features to public callbacks andRhwpDocumentcommand APIs. - Preserved example dirty state across native/full editor mode switches and exported the attached full editor's latest HWP bytes before opening native editor mode.
2026-05-24 (2026.5.24) #
- Updated plugin release metadata for the
2026.5.24release. - Added a Flutter-native editor ruler with a View-ribbon toggle so the native editor surface is closer to the upstream editor chrome without WebView UI.
- Added Flutter-native ruler markers for the current paragraph's left margin, first-line indent, and right margin using synchronized paragraph properties.
- Added Flutter-native ruler marker dragging for paragraph left margin, first-line indent, and right margin through the native paragraph-format command path.
- Added a Flutter-native ruler double-click path for opening the paragraph shape dialog from the native editor chrome.
- Added a Flutter-native status-bar input-mode toggle so Insert/Overwrite can be switched from the native editor chrome as well as the Insert key.
- Added Flutter-native file-ribbon New and Ctrl/Cmd+N entry points that call an
app-provided
onNewRequestedcallback. - Added Flutter-native file-ribbon Close and Ctrl/Cmd+W entry points that call
an app-provided
onCloseRequestedcallback. - Added a Flutter-native file-ribbon export menu for DOCX, text, Markdown, and
current-page SVG artifacts through the existing
onExportedcallback. - Added a Flutter-native file-ribbon Print entry point and Ctrl/Cmd+P print
routing through an app-provided
onPrintRequestedPDF artifact callback. - Added a Flutter-native status-bar page indicator action for opening the Go to page dialog from the native editor chrome.
- Added a Flutter-native status-bar position action for restoring editor focus and text input at the current cursor or selection.
- Added a Flutter-native position-field navigation action that moves the native
editor caret and page viewport from the
Sec/Para/Offsetfields. - Added Flutter-native replace-field keyboard handling so Enter applies the active replacement and Escape clears/blurs the replace input.
- Covered the Flutter-native Ctrl/Cmd+O file-open shortcut path through the same app callback used by the file ribbon.
- Kept Flutter-native editor focus active after the file-ribbon Open action so follow-up editor shortcuts can be used without clicking the page again.
- Restored Flutter-native editor focus after save/export callbacks so file ribbon exports can be followed by Ctrl/Cmd+S/P without clicking the page.
- Restored Flutter-native editor focus after clearing the search field so follow-up editor shortcuts can be used without clicking the page again.
- Restored Flutter-native editor focus after clearing the replace field with Escape so follow-up editor shortcuts continue from the document surface.
- Kept Flutter-native search-field focus during live search and repeated Enter/Shift+Enter navigation, matching the upstream editor search flow.
- Kept Flutter-native replace-field focus after Enter replaces a match when another search match remains, allowing repeated replacements without refocusing the field.
- Added a Flutter-native replace-field Ctrl/Cmd+Enter shortcut for Replace all, reusing the same command path as the tools-ribbon button.
- Added Flutter-native replace-field Shift+Enter navigation to move to the previous search match while keeping replace input focus.
- Guarded Flutter-native search-field Enter handling against duplicate
TextField.onSubmitteddelivery so one key press advances only one match. - Restored Flutter-native replace-field focus policy when duplicate Enter submit delivery is skipped after keyboard handling.
- Covered Flutter-native replace-all Ctrl/Cmd+Enter duplicate submit delivery so bulk replacement remains single-shot and returns focus to the editor surface.
- Restored Flutter-native editor focus after search toolbar find/previous/next actions even when the replace field was active.
- Restored Flutter-native editor focus after clearing search while the replace field is active.
- Restored Flutter-native editor focus after replace toolbar Replace/Replace all actions while preserving replace-field Enter focus behavior.
- Refreshed Flutter-native search matches after deferred text-input page refresh so search counts and highlights follow the edited document state.
- Refreshed Flutter-native search matches after undo/redo snapshot restores so search counts and highlights follow restored document content.
- Refreshed Flutter-native search matches after ordinary non-deferred edits so search counts and highlights also follow immediate command edits.
- Ignored stale Flutter-native async search results/errors when the search text changes before the previous layer-tree search finishes.
- Added Flutter-native active ClickHere field controls that call rhwp core active-field APIs and rerender only the current page.
- Added Flutter-native footnote deletion from the insert ribbon using rhwp core footnote marker hit detection and delete commands.
- Added Flutter-native footnote text editing from the insert ribbon, backed by rhwp core footnote hit/info/insert/delete commands instead of WebView UI.
- Added Flutter-native header/footer manager text editing so a selected header/footer item can be edited directly from the manager dialog.
- Added Flutter-native file-ribbon document renaming through
setFileName, so native saves/export metadata can use the updated document name. - Added Flutter-native page-ribbon controls for clearing existing header and
footer text through
deleteTextInHeaderFooter. - Added Flutter-native selected object HTML clipboard fallback by exporting the
selected control through
exportControlHtmlduring copy and usingpasteHtmlwhen the native object clipboard is unavailable. - Added Flutter-native body context-menu new-number insertion through the same command path as the page ribbon.
- Covered Flutter-native table-cell context-menu ClickHere field property editing through the table-cell field inspection command path.
- Added Flutter-native body and table-cell context-menu field actions for opening the field list, editing click-here field properties, and removing the field at the current cursor.
- Added Flutter-native Ctrl/Cmd+Alt+R/O/L/X shortcuts for inserting rectangle, ellipse, line, and text-box shape presets through the native command path.
- Added a Flutter-native Ctrl/Cmd+Alt+I shortcut for inserting a picture through the same native command path as the input ribbon.
- Added a Flutter-native Ctrl/Cmd+Alt+T shortcut for inserting the current table preset through the same native command path as the input ribbon.
- Added a Flutter-native Ctrl/Cmd+Alt+B shortcut for opening the bookmark dialog through the same native command path as the input ribbon.
- Added a Flutter-native Ctrl/Cmd+Alt+E shortcut for opening the equation insertion dialog through the same native command path as the input ribbon.
- Added a Flutter-native Ctrl/Cmd+Alt+F shortcut for footnote insertion using the same native reference insertion command path as the input ribbon.
- Added Flutter-native Ctrl/Cmd+1/2/5 line-spacing shortcuts for 100%, 200%, and 150% paragraph spacing through the native paragraph-format command path.
- Added Flutter-native Ctrl/Cmd+BracketLeft/BracketRight shortcuts for decreasing and increasing paragraph indent through the native paragraph format command path.
- Added Flutter-native character effect shortcuts for strikethrough, superscript, and subscript using the existing native character-format command path.
- Added Flutter-native Ctrl/Cmd+Shift+Period/Comma shortcuts for increasing and decreasing the active editor font size through the same character-format command path as the format ribbon.
- Added Flutter-native previous/next page controls to the editor status bar so page navigation can be done from the bottom editor chrome without WebView controls.
- Added Flutter-native fit-page zoom commands to the view ribbon and status bar, computing the zoom from the mounted page and viewport height instead of using WebView editor controls.
- Added Flutter-native table properties editing for cell spacing, cell padding, page break mode, and repeated header rows.
- Added Flutter-native selected cell properties editing for size, padding, vertical alignment, text direction, header, and protection flags.
- Added Flutter-native fit-width zoom commands to the view ribbon and status bar, matching the upstream editor's dedicated page-width control.
- Added upstream-style Flutter-native font size decrement/increment buttons to the format ribbon.
- Added upstream-style Flutter-native paragraph indent decrement/increment buttons to the format ribbon.
- Added upstream-style Flutter-native table row above/below and column left/right insertion controls to the table ribbon and context menu.
- Added Flutter-native body context-menu insertion actions for pictures, shape presets, paragraph insertion, page breaks, and column breaks.
- Added Flutter-native body context-menu reference insertion actions for footnotes, equations, and bookmarks.
- Enabled Flutter-native body context-menu character formatting at a collapsed caret, including pending character-shape dialog values for the next inserted text.
- Added Flutter-native body and table-cell text context-menu character effects picker for superscript, subscript, emboss, and engrave formatting.
- Added Flutter-native body and table-cell text context-menu character color picker for text and background color swatches.
- Added Flutter-native body and table-cell text context-menu font family and font size picker actions.
- Added Flutter-native bookmark navigation from the bookmark dialog, backed by
a new
pageOfPositioncommand that resolves a document paragraph to its page without creating an edit history entry. - Kept Flutter-native table-cell text editing active while moving to the next or previous cell with Tab and Shift+Tab.
- Localized the Flutter-native bookmark management dialog and covered bookmark rename/delete flows from the insert ribbon.
- Isolated Flutter-native typing overlay repaints for pending text, caret, and IME composing previews so Space/text input does not repaint the rendered SVG page surface.
- Enabled Flutter-native table-cell text context-menu character formatting at a collapsed cell caret, so pending format can be applied to the next inserted cell text without selecting existing text.
- Covered Flutter-native table-cell context-menu character-shape pending values so dialog-based font and style changes are verified before cell text input.
- Added Flutter-native table-cell text context-menu paragraph actions, including paragraph shape and direct left/center/right/justify alignment.
- Covered Flutter-native table-cell context-menu paragraph-shape dialog values so line spacing, margins, spacing, and indent are verified for active cell paragraphs.
- Added Flutter-native body and table-cell text context-menu style picker actions, reusing the document style dialog for paragraph and active cell text styling.
- Added Flutter-native body and table-cell text context-menu line-spacing preset actions backed by the existing paragraph format command path.
- Added Flutter-native body and table-cell text context-menu paragraph indent decrease/increase actions using the shared paragraph format command path.
- Added upstream-style Flutter-native table object/cell mode switching: Escape promotes selected cells to a table object, and Enter/F5 re-enters cell selection.
- Added Flutter-native selected table-object movement and deletion through
rhwp core's dedicated
moveTableOffsetanddeleteTableControlcommands. - Added rhwp core HTML clipboard bridge commands and wired same-editor Flutter-native copy/paste to preserve rich body text and single table-cell text through HTML import/export.
- Added Flutter-native table row and column delete actions to the table cell context menu.
- Added Flutter-native table cell vertical alignment actions to the table cell context menu.
- Added Flutter-native table cell fill, clear-fill, and border actions to the table cell context menu.
- Added Flutter-native table cell split-into-grid editing through rhwp core's
splitTableCellIntocommand. - Added Flutter-native selected table-cell range split-into-grid editing
through rhwp core's
splitTableCellsInRangecommand. - Added Flutter-native selected table-cell range width/height resizing through
rhwp core's
resizeTableCellscommand. - Added Flutter-native extended table insertion through rhwp core's
createTableExcommand, including an inline/table-as-character toggle and optional column width input. - Added Flutter-native table formula evaluation through rhwp core's
evaluateTableFormulacommand. - Added Flutter-native table-cell paragraph split/merge editing through rhwp core's cell paragraph commands.
- Added Flutter-native blank paragraph insertion through rhwp core's
insertParagraphcommand and an input-ribbon button. - Added Flutter-native current paragraph deletion through rhwp core's
deleteParagraphcommand and an edit-ribbon button. - Added Flutter-native body paragraph merging through rhwp core's
mergeParagraphcommand, including Backspace/Delete paragraph-boundary handling. - Added Flutter-native body paragraph section/count/length metric commands and used them as fallbacks for empty paragraph boundary merging.
- Added Flutter-native left/right arrow paragraph-boundary navigation, including empty paragraph fallback through rhwp core paragraph metrics.
- Added Flutter-native word navigation across body paragraph boundaries, so Ctrl/Alt+Left and Ctrl/Alt+Right can cross visible and empty paragraphs.
- Added Flutter-native word deletion across body paragraph boundaries, so Ctrl/Alt+Backspace and Ctrl/Alt+Delete reuse the same document-aware range deletion path.
- Added Flutter-native word deletion while editing table-cell text, including
multi-paragraph cell ranges through rhwp core's
deleteRangeInTableCellcommand. - Added Flutter-native word navigation while editing table-cell text, so Ctrl/Alt+Left and Ctrl/Alt+Right move the active cell paragraph offset instead of leaking to the body cursor.
- Added Flutter-native Home/End movement while editing table-cell text, including a core length fallback for cell paragraphs without visible text runs.
- Added Flutter-native Ctrl/Cmd+Home and Ctrl/Cmd+End movement while editing table-cell text, keeping document-boundary shortcuts scoped to the active cell.
- Added Flutter-native PageUp/PageDown movement while editing table-cell text, using active-cell page-layer geometry instead of moving the body cursor.
- Added Flutter-native Left/Right movement while editing table-cell text, so plain arrow keys update the active cell text offset and cross cell paragraphs instead of moving the rectangular cell selection.
- Added Flutter-native Shift+arrow text range selection state and overlay while editing table-cell text, starting with horizontal caret extension.
- Wired Flutter-native table-cell text selections into editing commands, so Backspace/Delete remove the selected cell text and typed input replaces it.
- Wired Flutter-native table-cell text selections into copy/cut and rich HTML clipboard export, so only the selected cell text range is copied or removed.
- Wired Flutter-native table-cell text selections into paste, including rich HTML replacement and multiline plain-text paste through cell paragraph split.
- Changed multiline Flutter-native table-cell paste to show the first inserted line, pending deletion mask, and final cell caret immediately while slow Rust cell insert/split commands are still pending.
- Changed Flutter-native body and table-cell text cut to show pending deletion masks and collapsed caret positions before slow Rust delete commands finish.
- Changed multi-paragraph Flutter-native table-cell text cut and paste replacement previews to split pending deletion masks per cell paragraph.
- Changed multi-paragraph Flutter-native table-cell keyboard delete previews to split pending deletion masks per cell paragraph before Rust range deletion commands finish.
- Added Flutter-native select-all behavior while editing table-cell text, so
Ctrl+A/Cmd+Aselects the active cell's internal text instead of body text. - Changed Flutter-native table-cell search results and replacements to use the active cell text selection model, matching body search selection behavior.
- Added Flutter-native double-click word selection while editing table-cell text, using the same page-layer word-boundary logic as body text selection.
- Added Flutter-native triple-click paragraph selection while editing table-cell text, scoped to the active cell paragraph.
- Added Flutter-native drag selection while editing table-cell text, keeping text drags scoped to the active cell instead of rectangular cell selection.
- Changed Flutter-native Shift+click in active table-cell text editing to extend the cell text range instead of switching to rectangular cell selection.
- Kept Flutter-native table-cell text selections intact when secondary-clicking inside the selected cell text range, so context-menu actions operate on the existing selection.
- Added Flutter-native character formatting for selected table-cell text ranges, including context-menu formatting actions while cell text is selected.
- Kept Flutter-native editor focus after character-format toolbar actions, so follow-up shortcuts continue to apply to the current editor selection.
- Compacted the Flutter-native format toolbar by moving text colors and advanced effects into popup menus, and reset document click sequencing after toolbar actions so follow-up page taps do not become accidental double-clicks.
- Applied Flutter-native paragraph formatting to every table-cell paragraph covered by a selected cell text range, instead of only the active cell paragraph.
- Applied Flutter-native document styles to every table-cell paragraph covered by a selected cell text range, and refreshed the current paragraph-format state after style application.
- Added Flutter-native Up/Down movement while editing table-cell text, using page-layer text geometry first and core cell-paragraph metrics as a fallback instead of moving the rectangular cell selection.
- Limited deferred Flutter-native text-input refreshes to the edited page, so large documents do not re-render every mounted page when optimistic typing finally synchronizes with fresh SVG.
- Anchored Flutter-native pending text previews to table-cell text source context, so optimistic table-cell input overlays do not snap to body text runs that share the same section and paragraph identifiers.
- Anchored Flutter-native pending deletion masks to table-cell text source context for selected, overwrite, character, and word deletion in active cell text editing.
- Anchored Flutter-native table-cell text carets and IME composing previews to table-cell text source context instead of the body selection caret.
- Stabilized programmatic viewer page navigation so
goToPagerequests are not immediately overwritten by stale visible-page sync during editor navigation. - Added Flutter-native Delete-at-cell-paragraph-end handling to merge the next table-cell paragraph.
- Added Flutter-native bookmark list/add/delete/rename commands and an input ribbon bookmark dialog backed by rhwp core's bookmark API.
- Added Flutter-native field list/value commands and a tools-ribbon field value dialog backed by rhwp core's field API.
- Added Flutter-native cursor field inspection, ClickHere field property editing, and field-marker removal through rhwp core's field APIs.
- Added Flutter-native load-time
convertToEditablesupport so distribution HWP documents follow the upstream Web editor's editable-load path by default. - Added Flutter-native page hide commands and a page-ribbon dialog backed by rhwp core's PageHide API.
- Added Flutter-native header/footer list and delete commands from the page ribbon, backed by rhwp core's header/footer control APIs.
- Added the upstream-style F6 shortcut to open the Flutter-native style picker.
- Added the upstream-style
Alt+Tshortcut to open the Flutter-native paragraph shape dialog. - Matched the upstream page setup shortcut by opening the Flutter-native page setup dialog with F7.
- Added a Flutter-native replace shortcut so Ctrl/Cmd+H opens the tools ribbon and focuses the replace field without invoking the WebView editor.
- Added
holdTextRefreshWhileFocusedfor the Flutter-native editor and enabled it in the example app so desktop Space/text input does not release a page SVG refresh until focus moves outside the editor. - Made focused text refresh holding the default for
RhwpNativeEditor,RhwpEditor, andRhwpCommandEditor, with focus-loss release handling for delayed desktop text-input actions. - Stabilized desktop text-input focus churn handling so connection-close, delayed action, transient focus loss, and explicit external focus transitions release or hold native-editor page refresh at the right time.
- Kept
holdTextRefreshWhileFocusedfrom treating transient desktop text-input focus churn as an external focus move, preventing per-key page refreshes in the example app. - Delayed external-focus-triggered refresh release while desktop text input is still settling, so Space/text commits do not refresh the example document between keystrokes on macOS/Linux/Windows.
- Kept desktop text-input
nullfocus churn from releasing focused native-editor page refresh; deferred refresh now waits for an actual external focus target. - Kept desktop text-input connections from being treated as completed external focus moves while pending native-editor text overlays are still visible.
- Added Flutter-native file shortcuts for Ctrl/Cmd+Shift+S HWPX save and Ctrl/Cmd+P PDF export alongside the existing Ctrl/Cmd+S HWP save.
- Changed Flutter-native character toolbar and shortcuts to toggle active Bold/Italic/Underline/Strike/script/emboss states instead of only forcing them on.
- Added Flutter-native paragraph-boundary merge behavior for Backspace at the start of a paragraph and Delete at the end of a paragraph.
- Kept first/last paragraph boundary Backspace/Delete no-ops from triggering a native-editor page refresh.
- Added a Flutter-native go-to-page dialog from the view ribbon and Ctrl/Cmd+G,
backed by the existing
RhwpViewerController.goToPagepage scroller. - Kept Flutter-native IME composing previews and page overlays on their own listenable/repaint layers so Space/text input does not rebuild or repaint the rendered HWP page surface.
- Kept cached SVG page widgets alive across desktop text-input dependency churn so Space/text commits do not recreate the rendered page surface.
- Added Flutter-native zoom preset menus to the view ribbon and status bar, matching the upstream web editor's direct percentage selection.
- Matched Flutter-native viewer/editor zoom controls to the upstream web editor preset steps from 25% through 300%.
- Tracked the visible page while scrolling
RhwpViewerand surfaced that page in the Flutter-native editor status bar. - Kept focused Flutter-native text input from releasing deferred page refresh
after
TextInputAction.done, so Space/text commits stay in the overlay until the editor actually loses focus. - Changed the Flutter-native character shape dialog to preload the current caret character's font, style toggles, and colors.
- Changed the Flutter-native paragraph shape dialog to preload the current caret paragraph's alignment, line spacing, indents, and margins.
- Added paragraph-property query commands and synchronized the Flutter-native format ribbon with the caret's current paragraph alignment and line spacing.
- Treated external primary-focus churn during a desktop text commit as part of the active native-editor input session, preventing Space/text input from immediately releasing deferred page refresh.
- Added Flutter-native selected object copy, cut, and paste through rhwp core's internal control clipboard.
- Kept Flutter-native editor text refresh blocked when desktop focus/action churn arrives before a slow input command finishes.
- Debounced desktop text-input focus churn with the native editor refresh delay so typing or Space does not trigger visible page refreshes between commits.
- Restored the Flutter-native editor TextInput focus after delayed desktop input churn so typing or Space does not reopen a page refresh while editing.
- Kept late desktop text input actions from flushing an already scheduled native-editor page refresh while optimistic text input is still active.
- Added Flutter-native new page number insertion from the page ribbon through
rhwp core's
insert_new_number_nativecommand. - Added Flutter-native header/footer text insertion from the page ribbon, backed by rhwp core header/footer query and text-edit commands.
- Changed the Flutter-native header/footer text dialog to prefill existing text and replace it through the Rust header/footer delete command.
- Added Flutter-native style list/apply commands and a format toolbar style picker for body paragraphs and selected table-cell paragraphs.
- Added Flutter-native character background/shade color formatting for selected text, table-cell text, pending input, and the character-shape dialog.
- Added Flutter-native superscript/subscript character formatting from the format ribbon, pending input, and character-shape dialog.
- Added Flutter-native emboss/engrave character formatting from the format ribbon, pending input, and character-shape dialog.
- Added a Flutter-native view-ribbon toggle that overlays transparent table cell borders from the page layer tree.
- Added the upstream-style
Alt+Lshortcut to open the Flutter-native character shape dialog. - Changed the Flutter-native caret overlay to blink on the same 500ms cadence as the upstream web editor while keeping the caret hit-test widget mounted.
- Treated root or ancestor focus churn during desktop text input as part of the active editor session so Space/text input does not release deferred refresh.
- Matched upstream table-cell edit mode handling so
F5enters a selected cell andEscreturns active cell text editing to cell selection. - Matched upstream search-field keyboard handling so
Enter/Shift+Enternavigate matches andEscclears the active search from the tools ribbon. - Matched upstream find shortcut behavior so
Ctrl/Cmd+Fselects the existing search text when focusing the tools-ribbon search field. - Added upstream-style debounced live search from the Flutter-native tools ribbon search field.
- Scoped
RhwpViewercontroller rebuilds to zoom changes so native-editor cursor updates during typing do not refresh the page surface. - Batched continuous Flutter-native text input into one undo snapshot so Space and character input avoid repeated full-document snapshot work.
- Added Flutter-native font family selection to the format ribbon and character shape dialog, backed by rhwp font id registration and char-layout reflow through the Rust facade.
- Added native char-property query commands and synchronized the Flutter-native format ribbon with the caret's current document character shape.
- Added upstream-style line-spacing presets to the Flutter-native format ribbon.
- Kept Flutter-native editor deferred page refresh blocked when desktop text input focus briefly drops and returns during typing.
- Initial flutter_rhwp plugin scaffold.
- Added flutter_rust_bridge v2 Rust bridge with vendored rhwp v0.7.12.
- Added Dart APIs for opening bytes, rendering SVG, extracting text/Markdown, exporting HWP/HWPX/PDF, and applying basic text commands.
- Added RhwpViewer, an initial RhwpEditor overlay, and an example app with open/save/export workflows.
- Added facade tests against the vendored blank HWP sample, DOCX package output, and explicit unsupported exceptions for Web/WASM PDF export.
- Added HWP/HWPX export reopen checks for both the vendored blank sample and the bundled example asset.
- Strengthened native PDF export tests with structural PDF checks and a fast multi-page SVG-to-PDF regression case.
- Verified the FRB Web/WASM build path and patched vendored rhwp's standalone WASM startup and web-sys canvas style compatibility for FRB integration.
- Updated package metadata links for
JAICHANGPARK/flutter_rhwp. - Added a bundled example HWP asset and wired the example app to open it by default while keeping file picker and export/save workflows.
- Added text, Markdown, and SVG to the public Dart export surface and example export menu.
- Implemented initial DOCX export as a valid Word OOXML package generated from extracted document text, and exposed it in the example export menu.
- Added a Web-only
RhwpWebEditorembed for upstream@rhwp/editor, plus an example app toggle between the Flutter bridge editor and the upstream Web editor. - Added
RhwpWebEditorControllerso Web editor mode can export bytes from the upstream editor state instead of the stale Flutter bridge document. - Added a Web COOP/COEP service worker bootstrap for local FRB WASM debugging.
- Use the FRB process loader on iOS/macOS so the statically linked Rust library can be resolved inside Flutter apps.
- Removed incomplete Apple SwiftPM manifests so iOS/macOS builds use the CocoaPods podspec/cargokit path that links the Rust static library.
- Added Linux desktop example integration tests for opening the bundled HWP asset, rendering SVG, extracting text/Markdown, and exporting supported formats.
- Run Linux desktop integration tests under Xvfb in CI for headless GitHub Actions runners.
- Added macOS desktop example integration tests to CI for the bundled asset open/render/export workflow.
- Added Windows desktop example integration tests to CI for the bundled asset open/render/export workflow.
- Added Android emulator example integration tests to CI for the bundled asset open/render/export workflow.
- Added GitHub Actions CI for Rust/Dart checks, Web WASM build, desktop builds, and Android/iOS example builds.
- Added a custom
RhwpViewerSVG builder hook and Flutter widget paint tests for viewer rendering, zoom, and editor overlay command flows. - Isolated rendered SVG pages behind a repaint boundary so native editor typing overlays do not force the HWP page raster layer to repaint.
- Added a
RhwpViewerpage virtualization regression test for lazy SVG page rendering during scroll. - Added a Flutter-drawn
RhwpEditorcommand-target caret and selection marker with widget coverage for collapsed and expanded selection states. - Changed the example Web app to default to upstream Web editor mode so HWP open/edit/export can run without eager FRB WASM initialization on startup.
- Added example Web widget tests to CI so the browser editor mode shell is verified before the FRB WASM build.
- Added an iOS simulator CI helper and mobile workflow step for the example bundled asset open/render/export integration test.
- Added a generated FRB bridge mock smoke test for the Dart Rust API entrypoint.
- Improved DOCX export to use extracted Markdown and emit heading and simple table OOXML instead of only plain paragraph runs.
- Added root third-party notices for the vendored rhwp core, Cargokit, direct Dart/Rust dependencies, and generated FRB bridge files.
- Added a Web widget smoke test for bundled sample auto-open in upstream Web editor mode without eager Flutter bridge WASM initialization, and made empty Web editor module URLs render an inline message without injecting a bootstrap script.
- Added a typed Dart page layer tree model on top of rhwp's raw page layer tree JSON so editor/viewer code can inspect text nodes and bounds without ad hoc JSON traversal.
- Added text-run geometry helpers for page layer trees and made
RhwpEditorprefer layer-tree caret/selection bounds when first-page text run geometry is available. - Added a page-local
RhwpViewer.pageOverlayBuilderhook and movedRhwpEditorcaret/selection painting onto each rendered page so visible page overlays stay aligned with viewer scrolling and page layout. - Added a Flutter-native page setup dialog that reads and updates rhwp page definitions through the Rust bridge.
- Added Flutter-native footnote insertion from the insert ribbon through the Rust command bridge.
- Added Flutter-native equation insertion from the insert ribbon through the Rust command bridge.
- Prevented immediate text input actions from flushing the Flutter-native editor's deferred page refresh after every committed character.
- Reduced example-app typing refresh churn by using a longer native-editor render sync delay and deferring HWP snapshot export until save/export or a native-to-full-editor mode switch.
- Added Flutter-native picture insertion from the insert ribbon through an app supplied image picker callback and the Rust command bridge.
- Added Flutter-native rectangle shape insertion from the insert ribbon through the Rust shape-control command bridge.
- Expanded Flutter-native shape insertion into a preset menu for rectangle, ellipse, line, and text box controls.
- Added a
moveLineEndpointDart/Rust command and Flutter-native line endpoint drag handles for selected line objects. - Added Flutter-native page break and column break insertion from the insert ribbon and Ctrl/Cmd+Enter shortcuts through the Rust command bridge.
- Added a Flutter-native document information dialog from the file ribbon, backed by the existing Rust document metadata bridge.
- Extended page layer tree selection geometry to span multiple paragraphs and
wired
RhwpEditorpage overlays to render those page-local selection rects. - Added a Rust facade regression test for the page layer tree JSON contract that Flutter editor geometry depends on.
- Added
RhwpExportedDocumentandRhwpDocument.exportDocument()so save and download flows can use the same bytes, file name, extension, and MIME metadata contract across the Flutter bridge and example app. - Added
RhwpWebEditorController.exportDocument()so upstream Web editor mode can use the same export artifact metadata contract as the Flutter bridge. - Documented the Rust vendoring policy: commit
rust/vendor/rhwpfor reproducible builds, but keep generatedrust/targetoutput ignored. - Verified that the example Web release build completes after the Web editor default-mode and export artifact changes.
- Added Dart API documentation for export artifact metadata and Web editor controller export methods.
- Relaxed the
flutter_rust_bridgedependency constraint to a caret range and recorded the currentflutter pub publish --dry-runwarnings. - Added
.pubignoreso repository work logs remain indocs/without being published in the runtime package archive. - Added bundled asset integration coverage for native PDF export metadata and PDF byte structure, while keeping Web/WASM on the explicit unsupported path.
- Added
RhwpFullEditoras the public full-editor surface backed by upstream@rhwp/editor, and introducedRhwpCommandEditorto make the Flutter-native command overlay's limited role explicit. - Backed native
RhwpFullEditorwithwebview_allso the upstream editor can be hosted on Android, iOS, macOS, Windows, and Linux instead of being limited to Web. - Updated the Linux example runner to host Flutter in a
GtkOverlay, matching the platform view setup required bywebview_all's Linux WebKitGTK implementation. - Added the WebKitGTK 4.1 development package to Linux CI dependencies for the full-editor WebView host.
- Raised the Flutter SDK lower bound to 3.35.0 to match the native full-editor WebView host dependency.
- Added macOS outgoing network entitlements to the example app so WKWebView can load the upstream editor module in sandboxed debug/profile/release runs.
- Added a Flutter-side loading/error overlay for native
RhwpFullEditorso WebView bootstrap failures do not appear as a blank black panel. - Fixed upstream editor file injection by using
@rhwp/editor's documentedloadFile(data, fileName)API, and addedgetPageSvg()as the SVG export method for full-editor mode. - Simplified README around package purpose, installation, quick start, usage, example, notes, and license.
- Added ArrowUp/ArrowDown paragraph navigation with Shift selection extension in the Flutter-native editor.
- Added Tab key text insertion in the Flutter-native editor, including replacement of active text selections.
- Changed Flutter-native ArrowUp/ArrowDown movement to prefer page-layer text run geometry before falling back to paragraph order.
- Changed Flutter-native Home/End movement to use page-layer line geometry before falling back to paragraph boundaries.
- Added Ctrl/Option+Arrow word navigation with Shift selection extension in the Flutter-native editor.
- Added Ctrl/Option+Backspace/Delete word deletion in the Flutter-native editor.
- Added PageUp/PageDown page-level keyboard navigation with Shift selection extension in the Flutter-native editor.
- Added
RhwpNativeEditoras the 100% Flutter widget editor track while keepingRhwpFullEditoras the WebView/upstream editor fallback. - Reworked the Flutter-native editor surface with a Flutter toolbar, menu tabs, page viewport, caret/selection overlay, status bar, and basic insert/delete command flow.
- Updated the example editor toggle from
CommandstoNative editor. - Added page-layer text hit testing so the Flutter-native editor can move the caret by tapping rendered document text.
- Wired Flutter-native drag selection to the same page-layer hit-test model.
- Added Flutter-native editor keyboard handling for left/right/home caret movement, shift-selection, and backspace/delete command dispatch.
- Added a Flutter
TextInputClientbridge so the native editor can receive IME text composition and commit finalized text through the Rust insert command. - Added a Flutter-native composing preview overlay so active IME composition is visible near the caret before it is committed to the document.
- Added page-layer selection text extraction plus Flutter-native editor copy/cut/paste shortcuts and toolbar actions.
- Added
splitParagraphto the Rust bridge command surface and wired Flutter-native Enter/Shift+Enter handling. - Added
deleteRangeto the Rust bridge command surface and wired Flutter-native multi-paragraph selection replacement. - Added
applyCharFormatto the Rust bridge command surface and wired Flutter-native bold, italic, and underline toolbar/shortcut actions. - Added
applyCharFormatRangefor same-section multi-paragraph character formatting in the Flutter-native editor. - Added
applyParaFormatandapplyParaFormatRangefor paragraph alignment, with Flutter-native toolbar buttons for left, center, right, and justify. - Added Ctrl/Cmd+L/E/R/J paragraph alignment shortcuts for left, center, right, and justify in the Flutter-native editor.
- Added
insertTableto the Rust bridge command surface and wired a Flutter-native toolbar table insertion action. - Added table row/column insert and delete commands to the Rust bridge surface with Flutter-native toolbar actions.
- Added table cell merge and split commands to the Rust bridge surface with Flutter-native toolbar actions.
- Added page-layer table cell hit testing so
RhwpNativeEditorcan fill table edit context from tapped rendered cells. - Added Flutter-native table cell selection state and page overlay highlighting for tapped rendered cells.
- Added drag-based table cell range selection in
RhwpNativeEditor, including multi-cell overlay highlighting and merge command context updates. - Added Shift+click range extension for selected table cells in the Flutter-native editor.
- Added selected table cell text insert/delete commands through the Rust bridge
and wired
RhwpNativeEditortext input to the active cell. - Added table cell text source parsing and hit testing so tapping rendered cell text sets the active cell edit offset.
- Added page-layer object/control hit testing and Flutter overlay highlighting
for selected bounded objects in
RhwpNativeEditor. - Added a
deleteObjectControlDart/Rust command and wired selected object deletion throughRhwpNativeEditorDelete/Backspace handling and context menu actions. - Added selected object z-order commands to the Dart/Rust bridge and exposed bring-to-front/send-to-back/forward/backward actions through the Flutter-native edit ribbon and object context menu.
- Added selected object size/position property commands to the Dart/Rust bridge and exposed them through a Flutter-native object properties dialog.
- Added Flutter-native pointer drag move and resize handles for selected objects, backed by the same object properties bridge command.
- Added Arrow and Shift+Arrow keyboard nudging for selected objects in the Flutter-native editor.
- Added Shift+drag aspect-ratio preservation for selected object resize handles in the Flutter-native editor.
- Changed Flutter-native document edits to preserve the viewer widget and scroll position while refreshing rendered page content.
- Changed page SVG refreshes to keep showing the previous render until the next render completes, reducing edit-time flicker in the native editor.
- Changed Flutter-native text input, tab input, paste, and keyboard text delete edits to debounce page SVG refreshes so typing does not reload the page on every keystroke.
- Added a configurable
editRefreshDelayforRhwpNativeEditorand set the example app to a 1200 ms delay so slower typing does not trigger a page SVG refresh after every space or character. - Changed Flutter-native text input refresh scheduling to wait for the active
text input action or connection close before starting
editRefreshDelay, preventing page SVG refreshes while the user is still typing, and queued rapid text input commits so characters are not skipped while a previous edit command is still finishing. - Added an optimistic Flutter text overlay for committed native-editor input so newly typed text remains visible until the refreshed page SVG finishes rendering, including table cell input and a temporary caret at the end of the pending text.
- Changed collapsed body text input to advance the Flutter pending text overlay
and caret before a slow Rust
insertTextcommand finishes, so rapid Space and text entry stays visible without triggering per-character page SVG refresh. - Changed active table-cell text input to advance the Flutter pending text
overlay and cell caret before a slow Rust
insertTextInTableCellcommand finishes, keeping rapid Space/text entry visible inside the selected cell. - Changed single-paragraph body selection replacement to show the Flutter
pending delete mask, replacement text overlay, and collapsed caret before a
slow Rust
deleteTextcommand finishes. - Changed multi-paragraph body selection replacement to show Flutter pending
delete masks and replacement text before a slow Rust
deleteRangecommand finishes. - Changed single-paragraph table-cell text selection replacement to show the
Flutter pending delete mask, replacement text overlay, and cell caret before a
slow Rust
deleteTextInTableCellcommand finishes. - Added pending delete masks for Flutter-native body text deletion and selection replacement so removed text is hidden until the refreshed page SVG finishes rendering.
- Changed Flutter-native text input previews to update through a scoped notifier and suppressed root editor rebuilds for pending typing cursor moves, reducing visible page refresh while entering spaces or text.
- Added a short desktop text-input focus grace window so transient IME/focus churn while typing does not release the deferred page refresh immediately.
- Extended desktop native-editor input hold handling so delayed text input actions and longer focus churn after a space or character do not trigger a page SVG refresh while typing is still in progress.
- Added Flutter-native Insert/Overwrite input mode toggling with the Insert key,
including overwrite text replacement through the Rust
deleteTextcommand. - Extended Flutter-native overwrite typing to active table cell text through
the Rust
deleteTextInTableCellcommand. - Changed the Flutter-native status bar to show active table cell row/column and object selection context instead of only body paragraph offsets.
- Added a Flutter-native paragraph mark view toggle that paints paragraph-end markers from page layer tree text runs without changing rendered document output.
- Added a Flutter-native compare dialog in the tools ribbon that uses
extractTextand shows same/changed/added/removed line counts without editing the document. - Changed Flutter-native body paste to convert multiline clipboard text into paragraph split and insert commands instead of inserting raw newline text.
- Changed multiline Flutter-native body paste to show the first inserted line
and final logical caret immediately while slow Rust
insertTextandsplitParagraphcommands are still pending. - Added Flutter-native double-click word selection based on page-layer text run hit testing.
- Added Flutter-native triple-click paragraph selection using the same page-layer text source model.
- Added Flutter-native Shift+click selection extension for rendered text.
- Added Arrow and Tab keyboard navigation for selected table cells in the Flutter-native editor, including Shift+Arrow range extension.
- Added Escape handling in the Flutter-native editor to clear composing input, selected table cells, selected text, and active search highlights.
- Added Enter handling for selected table cells so the Flutter-native editor enters the active cell without dispatching a body paragraph split command.
- Added Flutter-native copy, cut, and paste handling for selected table cell text using page-layer cell text runs and table-cell edit commands.
- Added Flutter-native multi-cell table paste so tab/newline clipboard text is distributed across rendered table cells instead of being inserted into one active cell.
- Added Flutter-native find/replace support for table cell text using page-layer cell contexts and table-cell edit commands.
- Changed Delete/Backspace on selected table cells to clear the selected cell text, while preserving character-level deletion for active cell text editing.
- Split the Flutter-native editor toolbar into HWP-style ribbon tabs for file, edit, view, input, format, page, table, and tools, with table cell selection opening the table ribbon context.
- Added a Flutter-native secondary-click context menu for text selection, clipboard, formatting, paragraph alignment, table insertion, and selected table cell actions.
- Exposed strikethrough, font size, and text color character-format properties in the Dart command surface, and added a Flutter-native character shape dialog that applies those values through the Rust bridge.
- Added inline Flutter-native font size and text color controls to the format ribbon so common character shape edits no longer require opening the dialog.
- Added pending character formatting for collapsed selections in the native editor, so toolbar font/shape choices apply to the next inserted body text.
- Exposed line spacing, line spacing type, indent, and paragraph margin properties in the Dart paragraph-format command surface, and added a Flutter-native paragraph shape dialog that applies those values through the Rust bridge.
- Added Flutter-native text search in
RhwpNativeEditor, using page layer tree text runs to select and highlight matches without calling the upstream Web editor. - Added viewer page navigation to
RhwpViewerController, wired the Flutter-native editor view ribbon to previous/next page controls, and made search result selection request the matching page. - Added file-ribbon export actions to
RhwpNativeEditorso HWP, HWPX, and PDF save artifacts can be emitted through a Flutter callback without using the upstream Web editor. - Added synchronized zoom controls to the Flutter-native editor view ribbon and
status bar, backed by the shared
RhwpEditorControllerzoom state. - Added Ctrl/Cmd zoom shortcuts to the Flutter-native editor for zoom in, zoom out, and reset zoom.
- Added Ctrl/Cmd+mouse-wheel zoom handling to the Flutter-native editor viewport.
- Added file-open callback support to
RhwpNativeEditorand wired the example app so the native editor file ribbon can launch the same file picker and save callbacks as the outer app toolbar. - Added header/footer creation commands to the Dart/Rust bridge and enabled the Flutter-native editor page ribbon Header/Footer buttons.
- Added snapshot commands to the Dart/Rust bridge and wired
RhwpNativeEditoredit-ribbon undo/redo to rhwp core snapshots. - Added active search-match replace to the Flutter-native editor tools ribbon, using undo-aware delete/insert commands through the Rust bridge.
- Added replace-all to the Flutter-native editor tools ribbon, applying all current search matches in one undo-aware edit transaction.
- Added Flutter-native select-all through the edit ribbon, context menu, and Ctrl/Cmd+A shortcut using page layer tree source positions.
- Added End and Shift+End keyboard navigation to move or extend selection to the current paragraph end from page layer tree source positions.
- Added Ctrl/Cmd+F handling in
RhwpNativeEditorto open the tools ribbon and focus the Flutter-native search field. - Added F3 and Shift+F3 search result navigation shortcuts for the Flutter-native editor.
- Added Ctrl/Cmd+Home and Ctrl/Cmd+End document boundary navigation, including Shift selection extension, using page layer tree source positions.
- Kept Flutter-native text input refresh deferred while desktop platforms churn the text input connection, so typing spaces or characters no longer triggers a page SVG refresh while the editor still has focus.
- Kept delayed desktop
TextInputAction.doneevents from releasing the Flutter-native editor's deferred page refresh while the editor still has focus, preventing another per-character refresh path on macOS/Linux/Windows. - Cached the rendered SVG page widget inside
RhwpViewerso native-editor overlay updates during typing do not rebuild the SVG picture and appear as a page refresh. - Added
applyCharFormatInTableCellto the Dart/Rust command surface and wired Flutter-native character formatting to selected table cell text and pending table-cell input. - Added
applyParaFormatInTableCellto the Dart/Rust command surface and wired Flutter-native paragraph alignment/shape actions to selected table cell paragraphs. - Added
applyTableCellStyleto the Dart/Rust command surface and wired Flutter-native table ribbon actions for selected cell fill and border style. - Extended
applyTableCellStylewith selected table cell vertical alignment controls in the Flutter-native table ribbon.