iced-markdown-editor
A Word-style WYSIWYG CommonMark editor widget for iced 0.14,
with the GFM extensions strikethrough and task lists. Desktop and web.
- Pages like a word processor (A4, Letter, custom sizes, margins) or full width
- Formatting toolbar, keyboard shortcuts, Word-style autoformat
- Nested lists, task lists with clickable checkboxes, block quotes, code blocks
- WYSIWYG and Markdown source mode on the same pages
- Zoom, undo / redo, clipboard
- Optional syntax highlighting (
syntect) and images (images)
- Round trip tested against all 652 examples of the CommonMark 0.31.2 spec
[dependencies]
iced = "0.14"
iced-markdown-editor = { version = "0.17", features = ["syntect", "images"] }
use iced_markdown_editor::{markdown_editor, Action, EditorState, Event, FONTS};
struct App {
editor: EditorState,
}
#[derive(Debug, Clone)]
enum Message {
Editor(Action),
}
impl App {
fn new() -> Self {
Self { editor: EditorState::with_markdown("# Hello\n\n- [ ] first task\n") }
}
fn update(&mut self, message: Message) -> iced::Task<Message> {
match message {
Message::Editor(action) => {
let output = self.editor.update(action);
if output.events.contains(&Event::Changed) {
let _markdown = self.editor.markdown();
}
output.task.map(Message::Editor)
}
}
}
fn view(&self) -> iced::Element<'_, Message> {
markdown_editor(&self.editor).view().map(Message::Editor)
}
fn subscription(&self) -> iced::Subscription<Message> {
self.editor.subscription().map(Message::Editor)
}
}
pub fn main() -> iced::Result {
let mut app = iced::application(App::new, App::update, App::view)
.subscription(App::subscription);
for font in FONTS {
app = app.font(font);
}
app.run()
}
Examples
cargo run --example editor --features syntect,images cargo run --example minimal
cargo run --example images_folder --features images
cargo run --example images_embed --features images
cargo run --example images_upload --features images
cargo run --example images_insert --features images
cd examples/web && trunk serve --open
Documentation
See docs/ and docs.rs.
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option. The bundled DejaVu fonts have their own license (assets/fonts/LICENSE-DejaVu.txt).