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,27 +11,32 @@ import {
1011const props = defineProps <{
1112 editorComponent: EditorComponentType
1213 showCompileOutput? : boolean
14+ showSsrOutput? : boolean
1315 ssr: boolean
1416}>()
1517
1618const { store } = inject (injectKeyProps )!
1719const previewRef = useTemplateRef (' preview' )
18- const modes = computed (() =>
19- props .showCompileOutput
20- ? ([' preview' , ' js' , ' css' , ' ssr' ] as const )
21- : ([' preview' ] as const ),
22- )
20+ const modes = computed (() => {
21+ const outputModes: OutputModes [] = [' preview' ]
22+ if (props .showCompileOutput ) {
23+ outputModes .push (' js' , ' css' , ' ssr' )
24+ }
25+ if (props .ssr && props .showSsrOutput ) {
26+ outputModes .push (' ssr output' )
27+ }
28+ return outputModes
29+ })
2330
2431const mode = computed <OutputModes >({
25- get : () =>
26- (modes .value as readonly string []).includes (store .value .outputMode )
27- ? store .value .outputMode
28- : ' preview' ,
29- set(value ) {
30- if ((modes .value as readonly string []).includes (store .value .outputMode )) {
31- store .value .outputMode = value
32- }
33- },
32+ get : () => store .value .outputMode ,
33+ set : (value ) => (store .value .outputMode = value ),
34+ })
35+
36+ watchEffect (() => {
37+ if (! modes .value .includes (mode .value )) {
38+ mode .value = modes .value [0 ]
39+ }
3440})
3541
3642function reload() {
@@ -54,8 +60,13 @@ defineExpose({ reload, previewRef })
5460
5561 <div class =" output-container" >
5662 <Preview ref =" preview" :show =" mode === 'preview'" :ssr =" ssr" />
63+ <SsrOutput
64+ v-if =" mode === 'ssr output'"
65+ :context =" store.ssrOutput.context"
66+ :html =" store.ssrOutput.html"
67+ />
5768 <props .editorComponent
58- v-if =" mode !== 'preview'"
69+ v-else- if =" mode !== 'preview'"
5970 readonly
6071 :filename =" store.activeFile.filename"
6172 :value =" store.activeFile.compiled[mode]"
0 commit comments