-
Daniel Göbel authoredDaniel Göbel authored
BootstrapToast.vue 1.24 KiB
<script setup lang="ts">
import { useSlots, computed, type PropType } from "vue";
import type { Colors } from "@/types/PropTypes";
const slots = useSlots();
const props = defineProps({
colorClass: {
type: String as PropType<Colors>,
required: false,
default: "success",
},
toastId: { type: String, required: true },
});
const colorClassName = computed<string>(() => {
return `text-bg-${props.colorClass}`;
});
</script>
<template>
<Teleport to="#global-toast-container">
<div
role="alert"
aria-live="assertive"
aria-atomic="true"
class="toast align-items-center border-0"
:class="colorClassName"
data-bs-autohide="true"
:id="props.toastId"
>
<div class="toast-body">
<div class="d-flex justify-content-between fs-6">
<div class="flex-fill">
<slot></slot>
</div>
<button
type="button"
class="btn-close btn-close-white me-2"
data-bs-dismiss="toast"
aria-label="Close"
></button>
</div>
<div class="mt-2 pt-2 border-top" v-if="slots.body">
<slot name="body"></slot>
</div>
</div>
</div>
</Teleport>
</template>
<style scoped></style>