85 lines
1.7 KiB
Vue
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>
|