102 lines
2.7 KiB
Vue
102 lines
2.7 KiB
Vue
|
<template>
|
||
|
<div id="app" class="bg-white dark:bg-notion-dark">
|
||
|
<transition enter-active-class="linear duration-200 overflow-hidden"
|
||
|
enter-from-class="max-h-0"
|
||
|
enter-to-class="max-h-screen"
|
||
|
leave-active-class="linear duration-200 overflow-hidden"
|
||
|
leave-from-class="max-h-screen"
|
||
|
leave-to-class="max-h-0"
|
||
|
>
|
||
|
<div v-if="announcement && !isIframe" class="bg-nt-blue text-white text-center p-3 relative">
|
||
|
<a class="text-white font-semibold" href="" target="_blank">🚨
|
||
|
OpnForm beta is over 🚨</a>
|
||
|
<div role="button" class="text-white absolute right-0 top-0 p-3 cursor-pointer" @click="announcement=false">
|
||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" viewBox="0 0 20 20" fill="currentColor">
|
||
|
<path fill-rule="evenodd"
|
||
|
d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"
|
||
|
clip-rule="evenodd"
|
||
|
/>
|
||
|
</svg>
|
||
|
</div>
|
||
|
</div>
|
||
|
</transition>
|
||
|
|
||
|
|
||
|
<NuxtLoadingIndicator color="#2563eb"/>
|
||
|
<NuxtLayout>
|
||
|
<NuxtPage/>
|
||
|
</NuxtLayout>
|
||
|
<ToolsStopImpersonation/>
|
||
|
|
||
|
<Notifications />
|
||
|
</div>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import {computed} from 'vue'
|
||
|
import {useAppStore} from '~/stores/app'
|
||
|
|
||
|
export default {
|
||
|
el: '#app',
|
||
|
|
||
|
name: 'OpnForm',
|
||
|
|
||
|
components: {},
|
||
|
|
||
|
setup() {
|
||
|
const config = useRuntimeConfig()
|
||
|
useOpnSeoMeta({
|
||
|
title: 'OpnForm',
|
||
|
description: 'Create beautiful forms for free. Unlimited fields, unlimited submissions. It\'s free and it takes less than 1 minute to create your first form.',
|
||
|
ogImage: '/img/social-preview.jpg',
|
||
|
robots: () => {
|
||
|
return config.public.env === 'production' ? null : 'noindex, nofollow'
|
||
|
}
|
||
|
})
|
||
|
useHead({
|
||
|
titleTemplate: (titleChunk) => {
|
||
|
return titleChunk ? `${titleChunk} - OpnForm` : 'OpnForm';
|
||
|
}
|
||
|
})
|
||
|
|
||
|
const appStore = useAppStore()
|
||
|
|
||
|
return {
|
||
|
layout: computed(() => appStore.layout),
|
||
|
isIframe: useIsIframe()
|
||
|
}
|
||
|
},
|
||
|
|
||
|
mounted() {
|
||
|
useCrisp().showChat()
|
||
|
},
|
||
|
|
||
|
data: () => ({
|
||
|
announcement: false,
|
||
|
alert: {
|
||
|
type: null,
|
||
|
autoClose: 0,
|
||
|
message: '',
|
||
|
confirmationProceed: null,
|
||
|
confirmationCancel: null
|
||
|
},
|
||
|
navbarHidden: false
|
||
|
}),
|
||
|
|
||
|
computed: {
|
||
|
isOnboardingPage() {
|
||
|
return this.$route.name === 'onboarding'
|
||
|
},
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
workspaceAdded() {
|
||
|
this.$router.push({name: 'home'})
|
||
|
},
|
||
|
hideNavbar(hidden = true) {
|
||
|
this.navbarHidden = hidden
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|