60 lines
1.2 KiB
Vue
60 lines
1.2 KiB
Vue
|
<template>
|
||
|
<MkLink class="mention" :url="url" @click.stop>
|
||
|
<span class="icon">matrix /</span>
|
||
|
<span class="main">
|
||
|
<span class="username">@{{ username }}</span>
|
||
|
<span class="host">:{{ toUnicode(host) }}</span>
|
||
|
</span>
|
||
|
</MkLink>
|
||
|
</template>
|
||
|
|
||
|
<script lang="ts" setup>
|
||
|
import { toUnicode } from "punycode";
|
||
|
import MkLink from "@/components/MkLink.vue";
|
||
|
import { computed } from "vue";
|
||
|
|
||
|
const props = defineProps<{
|
||
|
username: string;
|
||
|
host: string;
|
||
|
}>();
|
||
|
|
||
|
const url = computed(
|
||
|
() => `https://matrix.to/#/@${props.username}:${props.host}`
|
||
|
);
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
.mention {
|
||
|
position: relative;
|
||
|
display: inline-block;
|
||
|
padding: 2px 8px 2px 2px;
|
||
|
margin-block: 2px;
|
||
|
border-radius: 999px;
|
||
|
max-width: 100%;
|
||
|
white-space: nowrap;
|
||
|
text-overflow: ellipsis;
|
||
|
color: var(--mention);
|
||
|
isolation: isolate;
|
||
|
|
||
|
&::before {
|
||
|
content: "";
|
||
|
position: absolute;
|
||
|
inset: 0;
|
||
|
border-radius: inherit;
|
||
|
background: var(--mention);
|
||
|
opacity: 0.1;
|
||
|
z-index: -1;
|
||
|
}
|
||
|
|
||
|
> .icon {
|
||
|
margin: 0 0.2em 0 0.35em;
|
||
|
border-radius: 100%;
|
||
|
opacity: 0.7;
|
||
|
}
|
||
|
|
||
|
> .main > .host {
|
||
|
opacity: 0.8;
|
||
|
}
|
||
|
}
|
||
|
</style>
|