The changes involve a comprehensive interface redesign across multiple pages, including: - Updated peer support badge with shield design - Switched privacy toggle to use USwitch component - Added light/dark mode support throughout - Enhanced layout and spacing in default template - Added series details page with timeline view - Improved event cards and status indicators - Refreshed member profile styles for better readability - Introduced global cursor styling for interactive elements
101 lines
2.6 KiB
Vue
101 lines
2.6 KiB
Vue
<template>
|
|
<!-- Corner Sticker Badge -->
|
|
<div
|
|
v-if="type === 'sticker'"
|
|
class="absolute top-2 right-2 z-10"
|
|
:title="title"
|
|
>
|
|
<div
|
|
class="relative transform rotate-3 hover:rotate-0 transition-transform"
|
|
style="width: 60px; height: 66px"
|
|
>
|
|
<!-- Shield background -->
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 1000 1000"
|
|
class="absolute inset-0 w-full h-full drop-shadow-lg"
|
|
>
|
|
<path
|
|
d="M500 70 150 175.3v217.1C150 785 500 930 500 930s350-145 350-537.6V175.2L500 70Z"
|
|
class="fill-purple-500"
|
|
/>
|
|
</svg>
|
|
|
|
<!-- Content on top of shield -->
|
|
<div class="absolute inset-0 flex flex-col items-center justify-center">
|
|
<Icon
|
|
name="heroicons:chat-bubble-left-right-solid"
|
|
class="w-6 h-6 text-white"
|
|
/>
|
|
</div>
|
|
|
|
<!-- Sparkle effect -->
|
|
<div
|
|
class="absolute top-0 right-1 w-2 h-2 bg-yellow-300 rounded-full animate-pulse"
|
|
></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Inline Badge -->
|
|
<div
|
|
v-else
|
|
:class="[
|
|
'inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full border text-xs font-medium transition-all',
|
|
variant === 'default' &&
|
|
'bg-purple-500/20 text-purple-300 border-purple-500/40 hover:bg-purple-500/30',
|
|
variant === 'subtle' &&
|
|
'bg-purple-500/10 text-purple-400 border-purple-500/20',
|
|
variant === 'solid' &&
|
|
'bg-purple-500 text-white border-purple-600 hover:bg-purple-600',
|
|
]"
|
|
:title="title"
|
|
>
|
|
<Icon
|
|
name="heroicons:chat-bubble-left-right"
|
|
:class="[
|
|
'w-3.5 h-3.5',
|
|
variant === 'default' && 'text-purple-300',
|
|
variant === 'subtle' && 'text-purple-400',
|
|
variant === 'solid' && 'text-white',
|
|
]"
|
|
/>
|
|
<span>{{ label }}</span>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
const props = defineProps({
|
|
/**
|
|
* Badge type - inline or corner sticker
|
|
* @values inline, sticker
|
|
*/
|
|
type: {
|
|
type: String,
|
|
default: "inline",
|
|
validator: (value) => ["inline", "sticker"].includes(value),
|
|
},
|
|
/**
|
|
* Display variant of the badge (for inline type)
|
|
* @values default, subtle, solid
|
|
*/
|
|
variant: {
|
|
type: String,
|
|
default: "default",
|
|
validator: (value) => ["default", "subtle", "solid"].includes(value),
|
|
},
|
|
/**
|
|
* Custom label text (defaults to "Offering Peer Support")
|
|
*/
|
|
label: {
|
|
type: String,
|
|
default: "Offering Peer Support",
|
|
},
|
|
/**
|
|
* Tooltip/title text
|
|
*/
|
|
title: {
|
|
type: String,
|
|
default: "This member offers 1:1 peer support sessions",
|
|
},
|
|
});
|
|
</script>
|