components/maintainer/Profile.vue (68 lines of code) (raw):

<template> <section class="profile"> <h1 class="profile__name">{{ profile.name }}</h1> <p class="profile__handler">@{{ handler }}</p> <div class="profile__bio" v-html="profile.bio"></div> <MaintainerLinks v-if="profile.links" :links="profile.links" /> <CommonCustomButton v-if="profile.sponsorLink" icon="heart" :href="profile.sponsorLink" class="profile__sponsor" > Sponsor {{ firstName }} </CommonCustomButton> </section> </template> <script> export default { props: { handler: { type: String, required: true, }, profile: { type: Object, required: true, }, }, computed: { firstName() { return this.profile.name.split(' ')[0] }, }, } </script> <style lang="scss" scoped> .profile { display: flex; flex-direction: column; align-items: flex-start; &__name { margin: 0; } &__handler { @include mobileToDesktopFontSize(var(--fs-medium), var(--fs-large)); margin-top: 0; color: var(--fc-primary); font-weight: var(--fw-bold); } &__bio { line-height: 1.5; ::v-deep p { &:first-of-type { margin-top: 0; } &:last-of-type { margin-bottom: 0; } } ::v-deep a { @include linksWithinText(); } } &__sponsor { align-self: flex-end; } } </style>