Files
hereconnect/apps/frontend/src/layouts/LayoutWithTabs.vue
T

53 lines
1.5 KiB
Vue
Raw Normal View History

2024-12-06 21:20:27 +02:00
<template>
<div class="grid h-full sm:grid-rows-[auto_1fr_auto] grid-rows-[1fr_auto_auto] overflow-hidden">
2024-12-07 01:33:10 +02:00
<div
class="flex overflow-auto pb-safe-or-4 sm:pt-safe px-4 touch-pan-y"
ref="contentScrollContainer"
>
<div class="sm:max-w-prose grid grid-cols-1 mx-auto my-5 w-full">
<slot name="default" v-bind:scrollToBottom />
2024-12-06 22:34:49 +02:00
</div>
2024-12-06 21:20:27 +02:00
</div>
<slot name="footer">
<footer
v-if="!slots.footer"
class="bg-gray-100 text-center py-1.5 border-t text-xs sm:text-base text-gray-700 sm:order-last sm:pb-safe-or-1.5"
>
<span class="text-nowrap">Сделайте НаСвязи удобнее.</span>
<span> </span>
<span class="text-nowrap">
Будем рады
<a href="/donate" class="underline underline-offset-2">вашей поддержке</a>
</span>
</footer>
</slot>
<TabBar />
</div>
</template>
<script setup lang="ts">
2024-12-07 01:33:10 +02:00
import { useTemplateRef } from 'vue'
2024-12-06 21:20:27 +02:00
const slots = defineSlots<{
2024-12-07 01:33:10 +02:00
default?: (slotBindings: { scrollToBottom: typeof scrollToBottom }) => void
2024-12-06 21:20:27 +02:00
footer?: () => void
}>()
2024-12-07 01:33:10 +02:00
const contentScrollContainerRef = useTemplateRef('contentScrollContainer')
const scrollToBottom = () => {
if (contentScrollContainerRef.value) {
contentScrollContainerRef.value.scrollTop = contentScrollContainerRef.value.scrollHeight
}
}
2024-12-06 22:34:49 +02:00
const layoutPageHead = useHead({
htmlAttrs: { class: 'overflow-hidden' },
bodyAttrs: { class: 'overflow-hidden' },
})
onBeforeUnmount(() => layoutPageHead?.dispose())
</script>