primevue-mirror/components/lib/chip/Chip.vue

99 lines
2.2 KiB
Vue
Raw Normal View History

2022-09-06 12:03:37 +00:00
<template>
2022-12-08 11:04:25 +00:00
<div v-if="visible" :class="containerClass" :aria-label="label">
<slot></slot>
<template v-if="!$slots.default">
2022-09-14 11:26:01 +00:00
<img v-if="image" :src="image" />
<component v-else-if="$slots.icon" :is="$slots.icon" class="p-chip-icon" />
<span v-else-if="icon" :class="['p-chip-icon', icon]" />
2022-09-14 11:26:01 +00:00
<div v-if="label" class="p-chip-text">{{ label }}</div>
</template>
<slot v-if="removable" name="removeicon" :onClick="close" :onKeydown="onKeydown">
<component :is="removeIcon ? 'span' : 'TimesCircleIcon'" tabindex="0" :class="['p-chip-remove-icon', removeIcon]" @click="close" @keydown="onKeydown"></component>
</slot>
2022-09-06 12:03:37 +00:00
</div>
</template>
<script>
import TimesCircleIcon from 'primevue/icons/timescircle';
2023-04-14 14:10:51 +00:00
2022-09-06 12:03:37 +00:00
export default {
name: 'Chip',
emits: ['remove'],
props: {
label: {
type: String,
default: null
},
icon: {
type: String,
default: null
},
image: {
type: String,
default: null
},
removable: {
type: Boolean,
default: false
},
removeIcon: {
type: String,
default: undefined
2022-09-06 12:03:37 +00:00
}
},
data() {
return {
visible: true
2022-09-14 11:26:01 +00:00
};
2022-09-06 12:03:37 +00:00
},
methods: {
2022-12-08 11:04:25 +00:00
onKeydown(event) {
if (event.key === 'Enter' || event.key === 'Backspace') {
this.close(event);
}
},
2022-09-06 12:03:37 +00:00
close(event) {
this.visible = false;
this.$emit('remove', event);
}
},
computed: {
containerClass() {
2022-09-14 11:26:01 +00:00
return [
'p-chip p-component',
{
'p-chip-image': this.image != null
}
];
2022-09-06 12:03:37 +00:00
}
},
components: {
TimesCircleIcon
2022-09-06 12:03:37 +00:00
}
2022-09-14 11:26:01 +00:00
};
2022-09-06 12:03:37 +00:00
</script>
<style>
.p-chip {
display: inline-flex;
align-items: center;
}
.p-chip-text {
line-height: 1.5;
}
.p-chip-icon.pi {
line-height: 1.5;
}
.p-chip-remove-icon {
line-height: 1.5;
cursor: pointer;
}
.p-chip img {
border-radius: 50%;
}
</style>