diff --git a/ts/editor-toolbar/WithLabel.d.ts b/ts/editor-toolbar/WithLabel.d.ts
new file mode 100644
index 000000000..a5606160d
--- /dev/null
+++ b/ts/editor-toolbar/WithLabel.d.ts
@@ -0,0 +1,8 @@
+// Copyright: Ankitects Pty Ltd and contributors
+// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
+import type { ToolbarItem } from "./types";
+
+export interface WithLabelProps {
+ button: ToolbarItem;
+ label: string;
+}
diff --git a/ts/editor-toolbar/WithLabel.svelte b/ts/editor-toolbar/WithLabel.svelte
new file mode 100644
index 000000000..da743696a
--- /dev/null
+++ b/ts/editor-toolbar/WithLabel.svelte
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/ts/editor-toolbar/dynamicComponents.ts b/ts/editor-toolbar/dynamicComponents.ts
index a3c2238a0..7fc623e8c 100644
--- a/ts/editor-toolbar/dynamicComponents.ts
+++ b/ts/editor-toolbar/dynamicComponents.ts
@@ -26,6 +26,9 @@ import type { WithDropdownMenuProps } from "./WithDropdownMenu";
import WithShortcut from "./WithShortcut.svelte";
import type { WithShortcutProps } from "./WithShortcut";
+import WithLabel from "./WithLabel.svelte";
+import type { WithLabelProps } from "./WithLabel";
+
import { dynamicComponent } from "sveltelib/dynamicComponent";
export const rawButton = dynamicComponent(
@@ -71,3 +74,5 @@ export const withDropdownMenu = dynamicComponent<
export const withShortcut = dynamicComponent(
WithShortcut
);
+
+export const withLabel = dynamicComponent(WithLabel);