ghostguild-org/app/components/PrivacyToggle.vue

67 lines
1.2 KiB
Vue

<template>
<div class="priv">
<span
v-for="opt in options"
:key="opt.value"
:class="{ on: modelValue === opt.value }"
@click="$emit('update:modelValue', opt.value)"
>{{ opt.label }}</span>
</div>
</template>
<script setup>
defineProps({
modelValue: { type: String, default: 'public' },
})
defineEmits(['update:modelValue'])
const options = [
{ label: 'Public', value: 'public' },
{ label: 'Members', value: 'members' },
{ label: 'Private', value: 'private' },
]
</script>
<style scoped>
.priv {
display: inline-flex;
gap: 0;
font-size: 9px;
font-family: 'Commit Mono', monospace;
letter-spacing: 0.02em;
}
.priv span {
padding: 2px 7px;
height: 18px;
display: flex;
align-items: center;
justify-content: center;
border: 1px dashed var(--border);
color: var(--text-faint);
cursor: pointer;
transition: all 0.12s;
user-select: none;
white-space: nowrap;
}
.priv span + span {
border-left: none;
}
.priv span:hover {
color: var(--text-dim);
}
.priv span.on {
background: var(--surface);
color: var(--text-bright);
border-color: var(--candle);
border-style: solid;
}
.priv span.on + span {
border-left-color: var(--candle);
}
</style>