ptitlutins/app/components/molecules/StubView.vue
2026-06-10 23:37:21 +02:00

85 lines
1.7 KiB
Vue

<script setup lang="ts">
withDefaults(
defineProps<{
icon: string
title: string
note: string
context?: string | null
}>(),
{
context: null,
},
)
</script>
<template>
<div class="stub-view">
<span class="icon-chip">
<Icon :name="icon" size="32" />
</span>
<div class="title">{{ title }}</div>
<p class="note">{{ note }}</p>
<div v-if="context" class="context-pill">
<Icon name="carbon:arrow-right" size="0.9rem" />
{{ $t("voyage.stub.context", { title: context }) }}
</div>
</div>
</template>
<style scoped>
.stub-view {
position: absolute;
inset: 0;
border-radius: var(--radius-xl);
border: 1px dashed var(--neutral-30);
background: var(--surface-card);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 0.7rem;
text-align: center;
padding: 2rem;
}
.icon-chip {
width: 64px;
height: 64px;
border-radius: var(--radius-xl);
background: var(--surface-tint);
color: var(--color-5);
display: inline-flex;
align-items: center;
justify-content: center;
}
.title {
font-family: var(--font-display);
font-weight: var(--weight-medium);
font-size: 2rem;
color: var(--primary-color);
line-height: 1;
}
.note {
font-family: var(--font-body);
font-size: 0.9rem;
color: var(--text-muted);
margin: 0;
max-width: 340px;
}
.context-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
border-radius: var(--radius-pill);
background: var(--color-9);
border: 1px solid var(--color-8);
font-family: var(--font-body);
font-size: 0.8rem;
font-weight: var(--weight-semibold);
color: var(--color-3);
}
</style>