2022-07-12 08:55:28 +00:00
|
|
|
<template>
|
|
|
|
<div v-if="attached && closable" class="tags has-addons">
|
2022-08-22 10:12:09 +00:00
|
|
|
<span class="tag" :class="[variant, size, { rounded }]">
|
2022-07-12 08:55:28 +00:00
|
|
|
<!-- <o-icon
|
|
|
|
v-if="icon"
|
|
|
|
:icon="icon"
|
|
|
|
:size="size"
|
|
|
|
:type="iconType"
|
|
|
|
/> -->
|
|
|
|
<span :class="{ 'has-ellipsis': ellipsis }" @click="click">
|
|
|
|
<slot />
|
|
|
|
</span>
|
|
|
|
</span>
|
|
|
|
<a
|
|
|
|
class="tag"
|
|
|
|
role="button"
|
|
|
|
:aria-label="ariaCloseLabel"
|
2022-08-22 10:12:09 +00:00
|
|
|
:tabindex="tabstop ? 0 : undefined"
|
2022-07-12 08:55:28 +00:00
|
|
|
:disabled="disabled"
|
|
|
|
:class="[
|
|
|
|
size,
|
|
|
|
closeType,
|
|
|
|
{ 'is-rounded': rounded },
|
|
|
|
closeIcon ? 'has-delete-icon' : 'is-delete',
|
|
|
|
]"
|
|
|
|
@click="close"
|
|
|
|
@keyup.delete.prevent="close"
|
|
|
|
>
|
|
|
|
<!-- <o-icon
|
|
|
|
custom-class=""
|
|
|
|
v-if="closeIcon"
|
|
|
|
:icon="closeIcon"
|
|
|
|
:size="size"
|
|
|
|
:type="closeIconType"
|
|
|
|
/> -->
|
|
|
|
</a>
|
|
|
|
</div>
|
2022-08-22 10:12:09 +00:00
|
|
|
<span v-else class="tag" :class="[variant, size, { 'is-rounded': rounded }]">
|
2022-07-12 08:55:28 +00:00
|
|
|
<!-- <o-icon
|
|
|
|
v-if="icon"
|
|
|
|
:icon="icon"
|
|
|
|
:size="size"
|
|
|
|
:type="iconType"
|
|
|
|
/> -->
|
|
|
|
<span :class="{ 'has-ellipsis': ellipsis }" @click="click">
|
|
|
|
<slot />
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<a
|
|
|
|
v-if="closable"
|
|
|
|
role="button"
|
|
|
|
:aria-label="ariaCloseLabel"
|
|
|
|
class="delete is-small"
|
|
|
|
:class="closeType"
|
|
|
|
:disabled="disabled"
|
2022-08-22 10:12:09 +00:00
|
|
|
:tabindex="tabstop ? 0 : undefined"
|
2022-07-12 08:55:28 +00:00
|
|
|
@click="close"
|
|
|
|
@keyup.delete.prevent="close"
|
|
|
|
/>
|
|
|
|
</span>
|
|
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
|
|
const props = withDefaults(
|
|
|
|
defineProps<{
|
|
|
|
attached?: boolean;
|
|
|
|
closable?: boolean;
|
2022-08-22 10:12:09 +00:00
|
|
|
variant?: string;
|
2022-07-12 08:55:28 +00:00
|
|
|
size?: string;
|
|
|
|
rounded?: boolean;
|
|
|
|
disabled?: boolean;
|
|
|
|
ellipsis?: boolean;
|
|
|
|
tabstop?: boolean;
|
|
|
|
ariaCloseLabel?: string;
|
|
|
|
icon?: string;
|
|
|
|
iconType?: string;
|
|
|
|
closeType?: string;
|
|
|
|
closeIcon?: string;
|
|
|
|
closeIconType?: string;
|
|
|
|
}>(),
|
|
|
|
{
|
|
|
|
tabstop: true,
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
const emit = defineEmits(["close", "click"]);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Emit close event when delete button is clicked
|
|
|
|
* or delete key is pressed.
|
|
|
|
*/
|
|
|
|
const close = (event: Event) => {
|
|
|
|
if (props.disabled) return;
|
|
|
|
emit("close", event);
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* Emit click event when tag is clicked.
|
|
|
|
*/
|
|
|
|
const click = (event: Event) => {
|
|
|
|
if (props.disabled) return;
|
|
|
|
emit("click", event);
|
|
|
|
};
|
|
|
|
</script>
|