22import SplitPane from ' ./SplitPane.vue'
33import Output from ' ./output/Output.vue'
44import { Store , ReplStore , SFCOptions } from ' ./store'
5- import { provide , ref , toRef } from ' vue'
5+ import { provide , ref , toRef , computed } from ' vue'
66import type { EditorComponentType } from ' ./editor/types'
77import EditorContainer from ' ./editor/EditorContainer.vue'
88
@@ -17,6 +17,7 @@ export interface Props {
1717 clearConsole? : boolean
1818 sfcOptions? : SFCOptions
1919 layout? : ' horizontal' | ' vertical'
20+ layoutReverse? : boolean
2021 ssr? : boolean
2122 previewOptions? : {
2223 headHTML? : string
@@ -37,6 +38,7 @@ const props = withDefaults(defineProps<Props>(), {
3738 showImportMap: true ,
3839 showTsConfig: true ,
3940 clearConsole: true ,
41+ layoutReverse: false ,
4042 ssr: false ,
4143 previewOptions : () => ({
4244 headHTML: ' ' ,
@@ -73,6 +75,9 @@ sfcOptions.script.fs = {
7375
7476store .init ()
7577
78+ const editorSlotName = computed (() => props .layoutReverse ? ' right' : ' left' )
79+ const outputSlotName = computed (() => props .layoutReverse ? ' left' : ' right' )
80+
7681provide (' store' , store )
7782provide (' autoresize' , props .autoResize )
7883provide (' import-map' , toRef (props , ' showImportMap' ))
@@ -93,10 +98,10 @@ defineExpose({ reload })
9398<template >
9499 <div class =" vue-repl" >
95100 <SplitPane :layout =" layout" >
96- <template #left >
101+ <template #[ editorSlotName ] >
97102 <EditorContainer :editorComponent =" editor" />
98103 </template >
99- <template #right >
104+ <template #[ outputSlotName ] >
100105 <Output
101106 ref =" outputRef"
102107 :editorComponent =" editor"
0 commit comments