48 lines
940 B
Vue
48 lines
940 B
Vue
<template>
|
|
<span :class="['badge', `badge--${tone}`]">
|
|
<Icon v-if="icon" :name="icon" class="badge__icon" />
|
|
<slot />
|
|
</span>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
withDefaults(
|
|
defineProps<{
|
|
/** "violet" = brand tint pill, "neutral" = subtle gray pill. */
|
|
tone?: "neutral" | "violet"
|
|
/** Optional leading Carbon icon. */
|
|
icon?: string
|
|
}>(),
|
|
{ tone: "violet", icon: undefined },
|
|
)
|
|
</script>
|
|
|
|
<style scoped>
|
|
.badge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--space-1);
|
|
padding: 5px 10px;
|
|
border-radius: var(--radius-pill);
|
|
font-family: var(--font-body);
|
|
font-size: var(--text-xs);
|
|
font-weight: var(--weight-semibold);
|
|
line-height: 1;
|
|
}
|
|
|
|
.badge--violet {
|
|
background: var(--color-9);
|
|
color: var(--color-3);
|
|
}
|
|
|
|
.badge--neutral {
|
|
background: var(--neutral-10);
|
|
color: var(--neutral-70);
|
|
}
|
|
|
|
.badge__icon {
|
|
width: 0.875rem;
|
|
height: 0.875rem;
|
|
flex-shrink: 0;
|
|
}
|
|
</style>
|