@@ -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