55 lines
1.2 KiB
Vue
55 lines
1.2 KiB
Vue
<script setup lang="ts">
|
|
import { t } from '@/i18n'
|
|
|
|
import PublishControl from '@/components/PublishControl.vue'
|
|
import type { ArticleDraftState } from '@/composables/useArticleDraft'
|
|
|
|
defineProps<{
|
|
online: boolean
|
|
state: ArticleDraftState
|
|
saveEnabled: boolean
|
|
publishPending: string | undefined
|
|
publishDisabled: boolean
|
|
}>()
|
|
|
|
const emit = defineEmits<{
|
|
details: []
|
|
save: []
|
|
publish: []
|
|
unpublish: []
|
|
}>()
|
|
</script>
|
|
|
|
<template>
|
|
<div class="flex flex-shrink-0 gap-2 border-t border-default bg-default p-3 lg:hidden">
|
|
<UButton
|
|
icon="i-lucide-panel-right"
|
|
color="neutral"
|
|
variant="outline"
|
|
class="size-11 justify-center"
|
|
:aria-label="t('Details')"
|
|
@click="emit('details')"
|
|
/>
|
|
<UButton
|
|
data-testid="save-button-mobile"
|
|
color="neutral"
|
|
variant="outline"
|
|
class="h-11 flex-1 justify-center"
|
|
:disabled="!saveEnabled"
|
|
@click="emit('save')"
|
|
>
|
|
{{ t('Save') }}
|
|
</UButton>
|
|
<PublishControl
|
|
class="h-11 flex-1 justify-center"
|
|
hide-icon
|
|
:online="online"
|
|
:dirty="state === 'dirty'"
|
|
:pending="publishPending"
|
|
:disabled="publishDisabled"
|
|
@publish="emit('publish')"
|
|
@unpublish="emit('unpublish')"
|
|
/>
|
|
</div>
|
|
</template>
|