11<script setup lang="ts">
22import Preview from ' ./Preview.vue'
3- import { computed , inject , useTemplateRef } from ' vue'
3+ import SsrOutput from ' ./SsrOutput.vue'
4+ import { computed , inject , useTemplateRef , watchEffect } from ' vue'
45import {
56 type EditorComponentType ,
67 type OutputModes ,
@@ -10,28 +11,33 @@ import {
1011const props = defineProps <{
1112 editorComponent: EditorComponentType
1213 showCompileOutput? : boolean
13- ssr: boolean ,
1414 showOpenSourceMap? : boolean
15+ showSsrOutput? : boolean
16+ ssr: boolean
1517}>()
1618
1719const { store } = inject (injectKeyProps )!
1820const previewRef = useTemplateRef (' preview' )
19- const modes = computed (() =>
20- props .showCompileOutput
21- ? ([' preview' , ' js' , ' css' , ' ssr' ] as const )
22- : ([' preview' ] as const ),
23- )
21+ const modes = computed (() => {
22+ const outputModes: OutputModes [] = [' preview' ]
23+ if (props .showCompileOutput ) {
24+ outputModes .push (' js' , ' css' , ' ssr' )
25+ }
26+ if (props .ssr && props .showSsrOutput ) {
27+ outputModes .push (' ssr output' )
28+ }
29+ return outputModes
30+ })
2431
2532const mode = computed <OutputModes >({
26- get : () =>
27- (modes .value as readonly string []).includes (store .value .outputMode )
28- ? store .value .outputMode
29- : ' preview' ,
30- set(value ) {
31- if ((modes .value as readonly string []).includes (store .value .outputMode )) {
32- store .value .outputMode = value
33- }
34- },
33+ get : () => store .value .outputMode ,
34+ set : (value ) => (store .value .outputMode = value ),
35+ })
36+
37+ watchEffect (() => {
38+ if (! modes .value .includes (mode .value )) {
39+ mode .value = modes .value [0 ]
40+ }
3541})
3642
3743const showSourceMap = computed (() => {
@@ -64,8 +70,13 @@ defineExpose({ reload, previewRef })
6470
6571 <div class =" output-container" >
6672 <Preview ref =" preview" :show =" mode === 'preview'" :ssr =" ssr" />
73+ <SsrOutput
74+ v-if =" mode === 'ssr output'"
75+ :context =" store.ssrOutput.context"
76+ :html =" store.ssrOutput.html"
77+ />
6778 <props .editorComponent
68- v-if =" mode !== 'preview'"
79+ v-else- if =" mode !== 'preview'"
6980 readonly
7081 :filename =" store.activeFile.filename"
7182 :value =" store.activeFile.compiled[mode]"
0 commit comments