Files
speckle-server/packages/frontend-2/components/presentation/leftSidebar/Slide.vue
T
2025-09-15 10:01:59 +02:00

59 lines
1.6 KiB
Vue

<template>
<li class="pb-3">
<button
class="bg-foundation-page rounded-xl overflow-hidden border border-outline-3 transition-all duration-200"
:class="[
isCurrentSlide ? '!border-outline-5' : '',
slide.visibility !== SavedViewVisibility.AuthorOnly
? 'hover:!border-outline-4'
: 'cursor-not-allowed'
]"
:disabled="slide.visibility === SavedViewVisibility.AuthorOnly"
@click="emit('select-slide', slide.id)"
>
<img
:src="slide.screenshot"
:alt="slide.name"
class="w-full h-28 object-cover"
:class="{
'opacity-40': slide.visibility === SavedViewVisibility.AuthorOnly
}"
/>
</button>
<div class="flex items-center gap-1.5 text-foreground mt-1">
<LucideEyeOff
v-if="slide.visibility === SavedViewVisibility.AuthorOnly"
class="size-4"
/>
<p class="text-body-3xs leading-none">
{{ slide.name }}
</p>
</div>
</li>
</template>
<script setup lang="ts">
import { graphql } from '~~/lib/common/generated/gql'
import { SavedViewVisibility } from '~~/lib/common/generated/gql/graphql'
import type { PresentationSlidesLeftSidebarSlide_SavedViewFragment } from '~~/lib/common/generated/gql/graphql'
import { LucideEyeOff } from 'lucide-vue-next'
graphql(`
fragment PresentationSlidesLeftSidebarSlide_SavedView on SavedView {
id
name
screenshot
visibility
}
`)
defineProps<{
slide: PresentationSlidesLeftSidebarSlide_SavedViewFragment
isCurrentSlide: boolean
}>()
const emit = defineEmits<{
(e: 'select-slide', id: string): void
}>()
</script>