feat: pivot to social media workflow app
Some checks failed
Backend CI/CD / build_and_deploy (push) Has been cancelled
Frontend CI/CD / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-04-24 12:58:35 -04:00
parent 0f4acc1b6d
commit df3e602015
349 changed files with 18685 additions and 16010 deletions

View File

@@ -0,0 +1,79 @@
<script setup>
import { computed } from 'vue';
const props = defineProps({
name: {
type: String,
default: '',
},
email: {
type: String,
default: '',
},
src: {
type: String,
default: null,
},
size: {
type: String,
default: 'md',
},
});
const initials = computed(() => {
const basis = props.name?.trim() || props.email?.trim() || '?';
const parts = basis.split(/[\s@._-]+/).filter(Boolean);
if (!parts.length) {
return '?';
}
if (parts.length === 1) {
return parts[0].slice(0, 2).toUpperCase();
}
return `${parts[0][0] ?? ''}${parts[1][0] ?? ''}`.toUpperCase();
});
const classes = computed(() => ({
avatar: true,
'avatar-sm': props.size === 'sm',
'avatar-md': props.size === 'md',
'avatar-lg': props.size === 'lg',
}));
</script>
<template>
<div :class="classes">
<img
v-if="src"
:src="src"
:alt="name || email || 'Avatar'"
/>
<span v-else>{{ initials }}</span>
</div>
</template>
<style scoped>
.avatar {
@apply inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full font-black uppercase;
background: linear-gradient(135deg, rgba(15, 118, 110, 0.16) 0%, rgba(255, 138, 61, 0.18) 100%);
color: #172033;
}
.avatar img {
@apply h-full w-full object-cover;
}
.avatar-sm {
@apply h-9 w-9 text-xs;
}
.avatar-md {
@apply h-11 w-11 text-sm;
}
.avatar-lg {
@apply h-14 w-14 text-base;
}
</style>