diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/bubble-menu.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/bubble-menu.tsx
index 1f4d7d94eee..1ba7457cc4b 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/bubble-menu.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/bubble-menu.tsx
@@ -278,7 +278,12 @@ export function EditorBubbleMenu({
<>
{onAddToChat && (
<>
-
+
>
)}
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.test.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.test.tsx
new file mode 100644
index 00000000000..e6bf381b8e8
--- /dev/null
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.test.tsx
@@ -0,0 +1,47 @@
+/** @vitest-environment jsdom */
+import { act, type ReactNode } from 'react'
+import { Tooltip } from '@sim/emcn'
+import { Blimp, Bold } from '@sim/emcn/icons'
+import { createRoot, type Root } from 'react-dom/client'
+import { afterEach, describe, expect, it, vi } from 'vitest'
+import { ToolbarButton } from '@/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button'
+
+describe('ToolbarButton', () => {
+ const rendered: Array<{ host: HTMLDivElement; root: Root }> = []
+
+ afterEach(() => {
+ for (const { host, root } of rendered) {
+ act(() => root.unmount())
+ host.remove()
+ }
+ rendered.length = 0
+ })
+
+ function renderButton(button: ReactNode): HTMLDivElement {
+ const host = document.createElement('div')
+ document.body.append(host)
+ const root = createRoot(host)
+ act(() => root.render({button}))
+ rendered.push({ host, root })
+ return host
+ }
+
+ it('uses the canonical active button treatment for selected formatting', () => {
+ const host = renderButton()
+ const button = host.querySelector('button[aria-label="Bold"]')
+
+ expect(button?.className).toContain('bg-[var(--surface-5)]')
+ expect(button?.className).toContain('border-[var(--border-1)]')
+ expect(button?.className).toContain('text-[var(--text-primary)]')
+ })
+
+ it('supports a compact glyph without reducing the button hit target', () => {
+ const host = renderButton(
+
+ )
+
+ const button = host.querySelector('button[aria-label="Add to Chat"]')
+ expect(button?.className).toContain('size-[28px]')
+ expect(button?.querySelector('svg')?.className.baseVal).toContain('size-[12px]')
+ })
+})
diff --git a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.tsx b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.tsx
index de1f3dd6e79..3436913633f 100644
--- a/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/toolbar-button.tsx
@@ -4,6 +4,8 @@ import { Button, cn, Tooltip } from '@sim/emcn'
interface ToolbarButtonProps {
/** Any SVG icon component, e.g. from `@sim/emcn/icons`. */
icon: ComponentType>
+ /** Reduces optically dense filled glyphs while keeping the standard button hit target. */
+ iconSize?: 'default' | 'compact'
label: string
shortcut?: string
isActive?: boolean
@@ -14,6 +16,7 @@ interface ToolbarButtonProps {
/** A single icon button for the editor's floating toolbars (bubble menu, link hover card). */
export function ToolbarButton({
icon: Icon,
+ iconSize = 'default',
label,
shortcut,
isActive,
@@ -25,7 +28,7 @@ export function ToolbarButton({