diff --git a/app/components/ReplEditor.vue b/app/components/ReplEditor.vue
new file mode 100644
index 0000000..3b05c50
--- /dev/null
+++ b/app/components/ReplEditor.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/app/layouts/default.vue b/app/layouts/default.vue
index f5236a5..f5a446b 100644
--- a/app/layouts/default.vue
+++ b/app/layouts/default.vue
@@ -2,26 +2,21 @@
import { getVersionsBatch } from 'fast-npm-meta'
import semver from 'semver'
-// todo: type
-const versions = useSessionStorage('versions', [])
-
-const loadingVersions = shallowRef(false)
-
-async function fetchVersions() {
- loadingVersions.value = true
- versions.value = await getVersionsBatch(['@vueuse/core', 'vue'])
- loadingVersions.value = false
-}
-
-if (!versions.value.length) {
- fetchVersions()
-}
+const { data: versions, status, error, refresh: fetchVersions } = await useAsyncData(
+ 'versions',
+ async () => getVersionsBatch(['@vueuse/core', 'vue']),
+ { default: () => ([]) },
+)
+
+const loadingVersions = computed(() => {
+ return status.value === 'pending'
+})
const vueVersion = shallowRef()
const vueVersions = computed(() => {
const vue = versions.value.find(p => p.name === 'vue')
- if (vue?.error)
+ if (vue?.error || error.value)
return []
return vue?.versions ?? []
})
@@ -32,7 +27,7 @@ const vueUseVersion = useRouteQuery('vueuse', 'latest')
const vueUseVersions = computed(() => {
const vueuse = versions.value.find(p => p.name === '@vueuse/core')
- if (vueuse?.error)
+ if (vueuse?.error || error.value)
return []
return vueuse?.versions ?? []
})
@@ -68,7 +63,7 @@ const prod = useRouteQuery('prod', 'false', {
-
+ fetchVersions()" />
import type { OutputModes } from '@vue/repl'
import type { ShallowRef } from 'vue'
-import { mergeImportMap, Repl, useStore, useVueImportMap } from '@vue/repl'
-import MonacoEditor from '@vue/repl/monaco-editor'
+import { mergeImportMap, useStore, useVueImportMap } from '@vue/repl'
const showOutput = useRouteQuery('showOutput', 'false', {
transform: stringToBooleanTransformer,
@@ -81,35 +80,15 @@ watch(() => injectedVueVersion.value, (newVersion) => {
watch(() => prod.value, (newProd) => {
productionMode.value = newProd
}, { immediate: true })
-
-const colorMode = useColorMode()
-
-const theme = computed(() => {
- if (colorMode.value === 'dark')
- return 'dark'
- else
- return 'light'
-})
-
-const previewOptions = {
- headHTML: `
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/nuxt.config.ts b/nuxt.config.ts
index b0befb6..b81e6ec 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,8 +1,8 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
- ssr: false,
compatibilityDate: '2024-11-01',
devtools: { enabled: true },
+ sourcemap: false,
future: {
compatibilityVersion: 4,
},
@@ -18,9 +18,12 @@ export default defineNuxtConfig({
},
build: {
rollupOptions: {
- external: ['typescript'],
+ external: ['typescript', '@vue/compiler-sfc'],
},
},
+ ssr: {
+ noExternal: ['@vue/repl'],
+ },
},
css: ['~/assets/css/main.css'],
})