Cargo.lock | 158 ++- Cargo.toml | 5 + crates/canvas/Cargo.toml | 6 +- crates/canvas/assets/backgrounds/bamboo.svg | 22 + crates/canvas/assets/backgrounds/binoculars-corner.svg | 20 + crates/canvas/assets/backgrounds/black-and-green-title.svg | 12 + crates/canvas/assets/backgrounds/blue-bubbles-corner-margin.svg | 10 + crates/canvas/assets/backgrounds/blue-bubbles-corner-top.svg | 5 + crates/canvas/assets/backgrounds/blue-clouds.svg | 10 + crates/canvas/assets/backgrounds/blue-dots.svg | 58 + crates/canvas/assets/backgrounds/blue-flow.svg | 18 + crates/canvas/assets/backgrounds/blue-mist-margin.svg | 14 + crates/canvas/assets/backgrounds/blue-stripe-title.svg | 15 + crates/canvas/assets/backgrounds/blue-stripes.svg | 12 + crates/canvas/assets/backgrounds/blue-swirls.svg | 102 ++ crates/canvas/assets/backgrounds/blue-wave-title.svg | 5 + crates/canvas/assets/backgrounds/blue-waves.svg | 33 + crates/canvas/assets/backgrounds/books.svg | 9 + crates/canvas/assets/backgrounds/bouquet.svg | 21 + crates/canvas/assets/backgrounds/boxes-shadow.svg | 16 + crates/canvas/assets/backgrounds/boxes.svg | 3 + crates/canvas/assets/backgrounds/bubbles-margin-margin.svg | 9 + crates/canvas/assets/backgrounds/bubbles-margin-top.svg | 8 + crates/canvas/assets/backgrounds/bubbles.svg | 25 + crates/canvas/assets/backgrounds/buildings.svg | 16 + crates/canvas/assets/backgrounds/chain-title.svg | 20 + crates/canvas/assets/backgrounds/circles.svg | 9 + crates/canvas/assets/backgrounds/clock.svg | 16 + crates/canvas/assets/backgrounds/columns.svg | 33 + crates/canvas/assets/backgrounds/computer.svg | 23 + crates/canvas/assets/backgrounds/cyan-title.svg | 25 + crates/canvas/assets/backgrounds/day-planner.svg | 21 + crates/canvas/assets/backgrounds/fireworks.svg | 25 + crates/canvas/assets/backgrounds/flat-squares.svg | 17 + crates/canvas/assets/backgrounds/flowers-and-hearts.svg | 36 + crates/canvas/assets/backgrounds/glasses-corner.svg | 15 + crates/canvas/assets/backgrounds/globe.svg | 18 + crates/canvas/assets/backgrounds/graph.svg | 18 + crates/canvas/assets/backgrounds/green-stripes.svg | 12 + crates/canvas/assets/backgrounds/hearts.svg | 11 + crates/canvas/assets/backgrounds/ivy.svg | 158 +++ crates/canvas/assets/backgrounds/large-push-pins.svg | 24 + crates/canvas/assets/backgrounds/light-bulb-corner.svg | 15 + crates/canvas/assets/backgrounds/lilies.svg | 15 + crates/canvas/assets/backgrounds/math-science-class-notes.svg | 17 + crates/canvas/assets/backgrounds/math.svg | 15 + crates/canvas/assets/backgrounds/networking.svg | 33 + crates/canvas/assets/backgrounds/notebook.svg | 19 + crates/canvas/assets/backgrounds/orange-margin.svg | 16 + crates/canvas/assets/backgrounds/paper.svg | 15 + crates/canvas/assets/backgrounds/paws-cyan.svg | 18 + crates/canvas/assets/backgrounds/pencil-and-notebook.svg | 17 + crates/canvas/assets/backgrounds/pens.svg | 27 + crates/canvas/assets/backgrounds/pixel-blends.svg | 39 + crates/canvas/assets/backgrounds/pixel.svg | 11 + crates/canvas/assets/backgrounds/plain-and-simple.svg | 12 + crates/canvas/assets/backgrounds/purple-clouds.svg | 61 + crates/canvas/assets/backgrounds/pushpins-corner.svg | 16 + crates/canvas/assets/backgrounds/rainbow-border.svg | 18 + crates/canvas/assets/backgrounds/rainbow-mini-border.svg | 44 + crates/canvas/assets/backgrounds/rainbow.svg | 40 + crates/canvas/assets/backgrounds/recipe.svg | 21 + crates/canvas/assets/backgrounds/red-and-black-margin.svg | 16 + crates/canvas/assets/backgrounds/side-stripes.svg | 11 + crates/canvas/assets/backgrounds/small-push-pins.svg | 22 + crates/canvas/assets/backgrounds/sparks.svg | 43 + crates/canvas/assets/backgrounds/stars.svg | 26 + crates/canvas/assets/backgrounds/swirls.svg | 45 + crates/canvas/assets/backgrounds/tiles.svg | 389 ++++++ crates/canvas/assets/backgrounds/triangles-title-margin.svg | 6 + crates/canvas/assets/backgrounds/triangles-title-top.svg | 6 + crates/canvas/assets/backgrounds/tulips.svg | 131 ++ crates/canvas/assets/backgrounds/window-reflection.svg | 14 + crates/canvas/assets/backgrounds/writing.svg | 25 + crates/canvas/examples/render_page.rs | 9 +- crates/canvas/src/document.rs | 581 +++++++-- crates/canvas/src/editor.rs | 528 ++++---- crates/canvas/src/editor/page.rs | 1 - crates/canvas/src/editor/table.rs | 10 +- crates/canvas/src/gpu/mod.rs | 89 +- crates/canvas/src/gpu/page.rs | 221 +++- crates/canvas/src/gpu/page/background.rs | 807 ++++++++++++ crates/canvas/src/gpu/profile.rs | 204 ++- crates/canvas/src/interaction/accessibility.rs | 1395 ++++++++++++--------- crates/canvas/src/interaction/mod.rs | 292 ++--- crates/canvas/src/interaction/profile.rs | 26 +- crates/canvas/src/interaction/tests.rs | 130 +- crates/canvas/src/layout.rs | 71 +- crates/canvas/src/math.rs | 6 +- crates/canvas/src/outline.rs | 778 ++++++++---- crates/draw/Cargo.toml | 16 +- crates/draw/src/edit.rs | 457 +++++++ crates/draw/src/icon.rs | 122 -- crates/draw/src/lib.rs | 1834 +-------------------------- crates/draw/src/render.rs | 2135 ++++++++++++++++++++++++++++++++ crates/draw/src/render/icon.rs | 161 +++ crates/draw/src/render/text.rs | 115 ++ crates/draw/src/text.rs | 113 -- crates/snowbound/Cargo.toml | 2 +- crates/snowbound/assets/icons/align-left.svg | 3 + crates/snowbound/assets/icons/attachment.svg | 3 + crates/snowbound/assets/icons/bold.svg | 3 + crates/snowbound/assets/icons/bullets.svg | 6 + crates/snowbound/assets/icons/calendar.svg | 4 + crates/snowbound/assets/icons/clear-formatting.svg | 3 + crates/snowbound/assets/icons/clock.svg | 3 + crates/snowbound/assets/icons/close.svg | 3 + crates/snowbound/assets/icons/equation.svg | 3 + crates/snowbound/assets/icons/font-color.svg | 3 + crates/snowbound/assets/icons/highlighter.svg | 3 + crates/snowbound/assets/icons/indent.svg | 4 + crates/snowbound/assets/icons/italic.svg | 3 + crates/snowbound/assets/icons/link.svg | 3 + crates/snowbound/assets/icons/new-page.svg | 3 + crates/snowbound/assets/icons/numbering.svg | 5 + crates/snowbound/assets/icons/outdent.svg | 4 + crates/snowbound/assets/icons/picture.svg | 4 + crates/snowbound/assets/icons/redo.svg | 3 + crates/snowbound/assets/icons/search.svg | 3 + crates/snowbound/assets/icons/sidebar-collapse.svg | 3 + crates/snowbound/assets/icons/sidebar-expand.svg | 3 + crates/snowbound/assets/icons/strikethrough.svg | 3 + crates/snowbound/assets/icons/subscript.svg | 4 + crates/snowbound/assets/icons/table.svg | 3 + crates/snowbound/assets/icons/underline.svg | 3 + crates/snowbound/assets/icons/undo.svg | 3 + crates/snowbound/assets/icons/zoom-in.svg | 3 + crates/snowbound/assets/icons/zoom-out.svg | 3 + crates/snowbound/assets/tags/address.svg | 34 + crates/snowbound/assets/tags/contact.svg | 25 + crates/snowbound/assets/tags/definition.svg | 15 + crates/snowbound/assets/tags/highlight.svg | 29 + crates/snowbound/assets/tags/phone.svg | 14 + crates/snowbound/assets/tags/remember.svg | 15 + crates/snowbound/assets/tags/star.svg | 14 + crates/snowbound/src/art.rs | 45 + crates/snowbound/src/macos.rs | 52 +- crates/snowbound/src/main.rs | 935 ++++++++++---- crates/ui/assets/chevron-down.svg | 3 + crates/ui/src/layout.rs | 12 +- crates/ui/src/lib.rs | 400 +++++- crates/ui/src/shell.rs | 282 +++++ crates/ui/src/tests.rs | 240 +++- crates/ui/src/text.rs | 60 +- crates/ui/src/theme.rs | 146 ++- crates/ui/src/widgets.rs | 253 ++-- fuzz/Cargo.lock | 10 + fuzz/Cargo.toml | 1 + fuzz/fuzz_targets/canvas_editor.rs | 3 +- tools/canvas/README.md | 14 +- 150 files changed, 11001 insertions(+), 4097 deletions(-)