diff --git a/client/web/assets/16px-solid/copy.svg b/client/web/assets/16px-solid/copy.svg
new file mode 100644
index 000000000..b8e5d45ca
--- /dev/null
+++ b/client/web/assets/16px-solid/copy.svg
@@ -0,0 +1,4 @@
+
diff --git a/client/web/assets/16px-solid/file-new.svg b/client/web/assets/16px-solid/file.svg
similarity index 100%
rename from client/web/assets/16px-solid/file-new.svg
rename to client/web/assets/16px-solid/file.svg
diff --git a/client/web/assets/16px-solid/paste.svg b/client/web/assets/16px-solid/paste.svg
new file mode 100644
index 000000000..fa211a58e
--- /dev/null
+++ b/client/web/assets/16px-solid/paste.svg
@@ -0,0 +1,4 @@
+
diff --git a/client/web/src/components/widgets/inputs/MenuBarInput.vue b/client/web/src/components/widgets/inputs/MenuBarInput.vue
index d739c3bfc..875462e54 100644
--- a/client/web/src/components/widgets/inputs/MenuBarInput.vue
+++ b/client/web/src/components/widgets/inputs/MenuBarInput.vue
@@ -65,7 +65,7 @@ const menuEntries: MenuListEntries = [
ref: undefined,
children: [
[
- { label: "New", icon: "FileNew", shortcut: ["Ctrl", "N"] },
+ { label: "New", icon: "File", shortcut: ["Ctrl", "N"] },
{ label: "Open…", shortcut: ["Ctrl", "O"] },
{
label: "Open Recent",
@@ -94,7 +94,7 @@ const menuEntries: MenuListEntries = [
],
[
{ label: "Import…", shortcut: ["Ctrl", "I"] },
- { label: "Export…", shortcut: ["Ctrl", "E"] },
+ { label: "Export…", shortcut: ["Ctrl", "E"], action: async () => (await wasm).export_document() },
],
[{ label: "Quit", shortcut: ["Ctrl", "Q"] }],
],
@@ -104,13 +104,13 @@ const menuEntries: MenuListEntries = [
ref: undefined,
children: [
[
- { label: "Undo", shortcut: ["Ctrl", "Z"], action: async () => (await wasm).undo()},
+ { label: "Undo", shortcut: ["Ctrl", "Z"], action: async () => (await wasm).undo() },
{ label: "Redo", shortcut: ["Ctrl", "⇧", "Z"] },
],
[
{ label: "Cut", shortcut: ["Ctrl", "X"] },
- { label: "Copy", shortcut: ["Ctrl", "C"] },
- { label: "Paste", shortcut: ["Ctrl", "V"] },
+ { label: "Copy", icon: "Copy", shortcut: ["Ctrl", "C"] },
+ { label: "Paste", icon: "Paste", shortcut: ["Ctrl", "V"] },
],
],
},
diff --git a/client/web/src/components/widgets/labels/Icon.vue b/client/web/src/components/widgets/labels/Icon.vue
index be58ad272..f2573a6c5 100644
--- a/client/web/src/components/widgets/labels/Icon.vue
+++ b/client/web/src/components/widgets/labels/Icon.vue
@@ -74,7 +74,9 @@ import ViewModePixels from "../../../../assets/16px-solid/view-mode-pixels.svg";
import EyeVisible from "../../../../assets/16px-solid/visibility-eye-visible.svg";
import EyeHidden from "../../../../assets/16px-solid/visibility-eye-hidden.svg";
import GraphiteLogo from "../../../../assets/16px-solid/graphite-logo.svg";
-import FileNew from "../../../../assets/16px-solid/file-new.svg";
+import File from "../../../../assets/16px-solid/file.svg";
+import Copy from "../../../../assets/16px-solid/copy.svg";
+import Paste from "../../../../assets/16px-solid/paste.svg";
import SwapButton from "../../../../assets/12px-solid/swap.svg";
import ResetColorsButton from "../../../../assets/12px-solid/reset-colors.svg";
@@ -143,7 +145,9 @@ const icons = {
EyeVisible: { component: EyeVisible, size: 16 },
EyeHidden: { component: EyeHidden, size: 16 },
GraphiteLogo: { component: GraphiteLogo, size: 16 },
- FileNew: { component: FileNew, size: 16 },
+ File: { component: File, size: 16 },
+ Copy: { component: Copy, size: 16 },
+ Paste: { component: Paste, size: 16 },
SwapButton: { component: SwapButton, size: 12 },
ResetColorsButton: { component: ResetColorsButton, size: 12 },
DropdownArrow: { component: DropdownArrow, size: 12 },
diff --git a/client/web/wasm/src/document.rs b/client/web/wasm/src/document.rs
index 5571a3dd7..f73b58944 100644
--- a/client/web/wasm/src/document.rs
+++ b/client/web/wasm/src/document.rs
@@ -98,6 +98,12 @@ pub fn undo() -> Result<(), JsValue> {
EDITOR_STATE.with(|editor| editor.borrow_mut().handle_message(DocumentMessage::Undo)).map_err(convert_error)
}
+/// Export the document
+#[wasm_bindgen]
+pub fn export_document() -> Result<(), JsValue> {
+ EDITOR_STATE.with(|editor| editor.borrow_mut().handle_message(DocumentMessage::ExportDocument)).map_err(convert_error)
+}
+
/// Select a layer from the layer list
#[wasm_bindgen]
pub fn select_layer(path: Vec) -> Result<(), JsValue> {