diff --git a/src/lib/components/admin/composer/ComposerCore.svelte b/src/lib/components/admin/composer/ComposerCore.svelte
index 19e7aed..a798c2f 100644
--- a/src/lib/components/admin/composer/ComposerCore.svelte
+++ b/src/lib/components/admin/composer/ComposerCore.svelte
@@ -18,6 +18,7 @@
import TextStyleDropdown from './TextStyleDropdown.svelte'
import MediaInsertDropdown from './MediaInsertDropdown.svelte'
import ComposerLinkManager from './ComposerLinkManager.svelte'
+ import ComposerBubbleMenu from './ComposerBubbleMenu.svelte'
import { ComposerMediaHandler } from './ComposerMediaHandler.svelte'
import { useComposerEvents } from './useComposerEvents.svelte'
import { useDropdown } from './useDropdown.svelte'
@@ -259,7 +260,7 @@
- {#if showToolbar && editor && !isLoading}
+ {#if showToolbar && editor && !isLoading && features.toolbar !== false}
{/if}
+ {#if features.bubbleMenu}
+
+ {/if}
{/if}
@@ -368,6 +372,7 @@
&.with-toolbar {
border-top: none;
+ margin-top: $unit-2x;
}
// More generous padding for full variant
diff --git a/src/lib/components/admin/composer/editorConfig.ts b/src/lib/components/admin/composer/editorConfig.ts
index 25b20d3..8b0c727 100644
--- a/src/lib/components/admin/composer/editorConfig.ts
+++ b/src/lib/components/admin/composer/editorConfig.ts
@@ -115,6 +115,15 @@ export function getColorCommands(): any[] {
return commands.colors?.commands || []
}
+// Get commands for bubble menu
+export function getBubbleMenuCommands(): any[] {
+ const textFormattingCommands = commands['text-formatting']?.commands || []
+ // Return only the essential formatting commands for bubble menu
+ return textFormattingCommands.filter((cmd) =>
+ ['bold', 'italic', 'underline', 'strike', 'link'].includes(cmd.name)
+ )
+}
+
// Commands to exclude from toolbar
export const excludedCommands = ['colors', 'fonts']
@@ -138,6 +147,11 @@ export function shouldShowSlashCommands(variant: ComposerVariant): boolean {
return variant !== 'minimal'
}
+// Whether to show bubble menu
+export function shouldShowBubbleMenu(variant: ComposerVariant): boolean {
+ return variant !== 'minimal'
+}
+
// Default features by variant
export function getDefaultFeatures(variant: ComposerVariant): ComposerFeatures {
if (variant === 'minimal') {
@@ -146,7 +160,9 @@ export function getDefaultFeatures(variant: ComposerVariant): ComposerFeatures {
mediaLibrary: false,
urlEmbed: false,
tables: false,
- codeBlocks: false
+ codeBlocks: false,
+ bubbleMenu: false,
+ toolbar: true
}
}
@@ -156,7 +172,9 @@ export function getDefaultFeatures(variant: ComposerVariant): ComposerFeatures {
mediaLibrary: true,
urlEmbed: false,
tables: false,
- codeBlocks: false
+ codeBlocks: false,
+ bubbleMenu: true,
+ toolbar: false
}
}
@@ -166,6 +184,8 @@ export function getDefaultFeatures(variant: ComposerVariant): ComposerFeatures {
mediaLibrary: true,
urlEmbed: true,
tables: true,
- codeBlocks: true
+ codeBlocks: true,
+ bubbleMenu: true,
+ toolbar: false
}
}
diff --git a/src/lib/components/admin/composer/types.ts b/src/lib/components/admin/composer/types.ts
index 2f6d4eb..a9598a6 100644
--- a/src/lib/components/admin/composer/types.ts
+++ b/src/lib/components/admin/composer/types.ts
@@ -8,6 +8,8 @@ export interface ComposerFeatures {
urlEmbed?: boolean
tables?: boolean
codeBlocks?: boolean
+ bubbleMenu?: boolean
+ toolbar?: boolean
}
export interface ComposerProps {