livemd_flutter 0.6.0
livemd_flutter: ^0.6.0 copied to clipboard
A lossless continuous Markdown Live Preview editor for Flutter.
0.6.0 #
- Add optional media import through pasteConfiguration. Applications own storage and players; the editor owns target tracking, insertion and undo.
- Import multiple images/animations, audio and video in original order, with bounded concurrency, atomic insertion, per-item outcomes and unused-upload reporting. Each batch is one undo step.
- Handle document, table and Callout paste actions, image-only menus, browser paste events, iOS native paste selectors, and Android keyboard commitContent.
- Add mediaTypeResolver for persistent attachment metadata and extensionless URLs, including table/Callout rendering and media tap dispatch.
- Preserve text fallback, parent rebuilds, original selections and outside focus; cancel conflicting, undone, disposed or replaced-document imports safely.
- Preserve escaped destinations, empty alt text, and Callout local/global selection/composition mapping. Honor host resolvers in Callout media previews.
- Add the optional livemd_flutter_clipboard adapter, cross-platform example, native/mobile/browser tests, and Windows/Linux CI verification.
0.5.0 #
- Add a semantic LiveMarkdownThemeData extension with application/local partial overrides and a host-adaptive Openbox default preset.
- BREAKING: remove editorStyle, markdownStyleSheet, direct appearance, previewBuilder, LiveMarkdownPreviewBuilder and blockSpacing from the editor. Semantic styles now use only theme; there is no compatibility layer.
- Expose supported table width, alignment, cell decoration and horizontal padding controls through LiveMarkdownThemeData.
- Add an embedded-host example comparing Openbox, compact desktop and dark borderless styles without replacing the controller or editor.
- Add optional editor appearance colors with shared internal default resolution.
- Allow Callout left-border and corner-radius overrides without changing layout.
- Respect explicit link decorations in document and table inline projections.
- Add theme-switching examples and regressions for rendered styles, source reveal, caret geometry, focus, and document state.
0.4.1 #
- Add a five-minute quick start with a complete, runnable editor example.
- Document public editor callbacks, controller lifecycle and history, media integration, and source-aware APIs.
- Expand the example guide with feature walkthroughs and application integration instructions; test that the README matches the runnable quick-start source.
- Documentation and examples only; no editor behavior changes.
0.4.0 #
-
Edit Callout titles and bodies inside the rendered shell while preserving global source, focus handoff, caret metrics, and preview-to-edit geometry.
-
Stabilize table cell input ownership, text preservation, caret positions, and pointer focus; ignore accidental mouse micro-drags.
-
Keep ATX heading baselines and fenced-code rows fixed while their source markers appear; code fences now retain one full-width background through reveal and scrolling.
-
Parse GFM tables as exact source-positioned blocks and edit rendered cells in place with global selection, composing, and undo state.
-
Add Obsidian-style table navigation, row/column insertion and deletion, dedicated add gutters, and a same-footprint whole-table source editor for arrow-key traversal.
-
Split media projection into compact inline embeds, 240 px standalone image/video previews, and a 48 px standalone audio player.
-
Keep a standalone media preview visible below its revealed source line, while pointer clicks remain media actions and arrow traversal remains source-aware.
-
Remove avoidable vertical movement when revealing links, Wiki links, inline styles, list/task/quote prefixes, headings, and complex block source.
-
Collapse hidden complex-block newlines without losing UTF-16 source offsets, and give rendered code, Callout, table, and rule previews the same height budget as their editable source.
-
Snap pointer-like selections out of nested media ranges and preserve exact projection length for standalone media and indented task prefixes.
-
Preserve injected audio/video player state while standalone source is revealed, allow pointer repositioning inside keyboard-revealed media source, and fall back to literal source when a media projection cannot fit safely.
-
Expand the example and regression matrix for inline/block media, rapid task clicks, arrow-key entry/exit, caret height, X stability, and following-line Y stability.
0.3.0 #
- Render complete
syntax as an inline picture with a broken-image fallback, while arrow-key traversal into the image range still reveals the exact source. - Resolve image destinations through an injectable
LiveMarkdownImageResolverthat mapsasset:paths to the application bundle instead of the network. - Disable the editable text forced strut so rendered Markdown owns its line heights, and reserve the exact image row height: heading lines, block rows, and inline placeholders no longer overflow or overlap their neighbors.
- Keep hidden marker runs height-tight so revealing inline syntax keeps the following content vertically stable.
- Report picture clicks through
onImageTapand snap stray pointer carets out of image source ranges, so clicks near a rendered row never reveal source that the caret was not meant to enter. - Render
as a video slot when the destination is a video file, with an injectableLiveMarkdownVideoBuilderfor real playback, anonVideoTappointer action, and source reveal on caret traversal. - Render
as an audio slot when the destination is an audio file, with an injectableLiveMarkdownAudioBuilderfor real playback, anonAudioTappointer action, and source reveal on caret traversal. - Size the caret to the natural glyph height (ascent plus descent) instead of the whole leading-inflated line, so it covers lowercase descenders without poking into the neighbors.
- Make the whole task marker one opaque hit target so clicking anywhere on it toggles the task instead of placing the caret inside the marker.
0.2.0 #
- Replace the per-block preview/TextField switcher with one continuous native editing surface and a source-range projection layer.
- Store the complete
TextEditingValue, including global selection and IME composing state, inLiveMarkdownController. - Add a lossless positioned syntax tree with nested inline nodes, complex link destinations, Wiki aliases, escaping, and literal incomplete states.
- Make rendered links and task checkboxes pointer actions while arrow-key traversal into the same ranges reveals their Markdown source.
- Keep rapid task-checkbox clicks inside a full-line hit target and derive each toggle from the latest source state, preventing accidental source reveal.
- Add Obsidian-style list, task, ordered-list, and quote Enter/Shift+Enter, Backspace, Tab, Shift+Tab, and ordered renumbering commands.
- Keep code fences, Callouts, GFM tables, and thematic breaks rendered until the caret enters their source range.
- Add global selection, IME, interaction, structural editing, nested syntax, and vertical-stability regression tests.
- Record an Obsidian 1.13.7 behavior oracle and expand the macOS example.
0.1.0 #
- Add lossless Markdown block parsing.
- Add live preview editor and document controller.
- Reveal source markers only for the inline token containing the caret.
- Keep font size, weight, and line height stable when source markers appear.
- Keep blank-line insertion focused after Return and support Backspace joins.
- Map preview taps to source offsets instead of always jumping to block end.
- Add arrow-key navigation between semantic blocks.
- Keep task and bullet markers visual while their source stays lossless.
- Keep single-line headings, paragraphs, and list items at a fixed vertical position while source markers expand.
- Add undo/redo, theming hooks, tests, and a macOS/web example.