Skip to content

Commit f83d4f1

Browse files
committed
Add UI configuration props to MjmlEditor
Add three new optional props to control editor UI behavior: - showThemeToggle: hide/show the theme toggle button - defaultLeftPanelOpen: set initial tree panel state - defaultRightPanelOpen: set initial inspector panel state
1 parent b868533 commit f83d4f1

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

packages/mjml-editor/src/components/editor/EditorCanvas.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ interface EditorCanvasProps {
1818
onTabChange: (tab: EditorTabType) => void;
1919
leftPanelOpen?: boolean;
2020
rightPanelOpen?: boolean;
21+
showThemeToggle?: boolean;
2122
}
2223

2324
export function EditorCanvas({
2425
activeTab,
2526
onTabChange,
2627
leftPanelOpen,
2728
rightPanelOpen,
29+
showThemeToggle = true,
2830
}: EditorCanvasProps) {
2931
const { undo, redo, canUndo, canRedo } = useEditor();
3032
const [previewMode, setPreviewMode] = useState<PreviewMode>('desktop');
@@ -112,7 +114,7 @@ export function EditorCanvas({
112114
>
113115
<Redo2 className="h-4 w-4" />
114116
</Button>
115-
<ThemeToggle />
117+
{showThemeToggle && <ThemeToggle />}
116118
</div>
117119
</div>
118120

packages/mjml-editor/src/components/editor/MjmlEditor.tsx

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ interface MjmlEditorProps {
4444
* @default true
4545
*/
4646
applyThemeToDocument?: boolean;
47+
/**
48+
* Whether to show the theme toggle in the toolbar.
49+
* @default true
50+
*/
51+
showThemeToggle?: boolean;
52+
/**
53+
* Whether the tree panel (left) is open by default.
54+
* @default true
55+
*/
56+
defaultLeftPanelOpen?: boolean;
57+
/**
58+
* Whether the inspector panel (right) is open by default.
59+
* @default false
60+
*/
61+
defaultRightPanelOpen?: boolean;
4762
}
4863

4964
/**
@@ -68,11 +83,23 @@ function ThemedEditorWrapper({
6883
);
6984
}
7085

71-
function EditorContent({ onChange }: { onChange: (mjml: string) => void }) {
86+
interface EditorContentProps {
87+
onChange: (mjml: string) => void;
88+
showThemeToggle?: boolean;
89+
defaultLeftPanelOpen?: boolean;
90+
defaultRightPanelOpen?: boolean;
91+
}
92+
93+
function EditorContent({
94+
onChange,
95+
showThemeToggle = true,
96+
defaultLeftPanelOpen = true,
97+
defaultRightPanelOpen = false,
98+
}: EditorContentProps) {
7299
const { state, undo, redo, canUndo, canRedo, deleteBlock, selectBlock } =
73100
useEditor();
74-
const [leftPanelOpen, setLeftPanelOpen] = useState(true);
75-
const [rightPanelOpen, setRightPanelOpen] = useState(true);
101+
const [leftPanelOpen, setLeftPanelOpen] = useState(defaultLeftPanelOpen);
102+
const [rightPanelOpen, setRightPanelOpen] = useState(defaultRightPanelOpen);
76103
const [activeTab, setActiveTab] = useState<EditorTabType>('edit');
77104

78105
// Store onChange in a ref to avoid infinite loops when parent doesn't memoize the callback
@@ -158,6 +185,7 @@ function EditorContent({ onChange }: { onChange: (mjml: string) => void }) {
158185
onTabChange={setActiveTab}
159186
leftPanelOpen={leftPanelOpen}
160187
rightPanelOpen={rightPanelOpen}
188+
showThemeToggle={showThemeToggle}
161189
/>
162190
</div>
163191

@@ -202,6 +230,9 @@ export function MjmlEditor({
202230
defaultTheme = 'system',
203231
liquidSchema,
204232
applyThemeToDocument = true,
233+
showThemeToggle = true,
234+
defaultLeftPanelOpen = true,
235+
defaultRightPanelOpen = false,
205236
}: MjmlEditorProps) {
206237
// Track if we're mounted (client-side) - editor requires browser APIs
207238
const [isMounted, setIsMounted] = useState(false);
@@ -235,7 +266,12 @@ export function MjmlEditor({
235266
<LiquidSchemaProvider schema={liquidSchema}>
236267
<ThemedEditorWrapper className={className}>
237268
<EditorProvider initialDocument={initialDocument}>
238-
<EditorContent onChange={handleChange} />
269+
<EditorContent
270+
onChange={handleChange}
271+
showThemeToggle={showThemeToggle}
272+
defaultLeftPanelOpen={defaultLeftPanelOpen}
273+
defaultRightPanelOpen={defaultRightPanelOpen}
274+
/>
239275
</EditorProvider>
240276
</ThemedEditorWrapper>
241277
</LiquidSchemaProvider>

0 commit comments

Comments
 (0)