{"version":3,"file":"BAlert-DVemcauI.mjs","sources":["../src/components/BAlert/BAlert.vue"],"sourcesContent":["<template>\n  <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n    <div\n      v-if=\"isAlertVisible\"\n      ref=\"element\"\n      class=\"alert\"\n      role=\"alert\"\n      aria-live=\"polite\"\n      aria-atomic=\"true\"\n      :class=\"computedClasses\"\n    >\n      <slot />\n      <template v-if=\"props.dismissible\">\n        <BButton v-if=\"hasCloseSlot || props.closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n          <slot name=\"close\">\n            {{ props.closeContent }}\n          </slot>\n        </BButton>\n        <BCloseButton v-else :aria-label=\"props.closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n      </template>\n    </div>\n  </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types/ComponentProps'\nimport {computed, ref, watchEffect} from 'vue'\nimport {useCountdown} from '../../composables/useCountdown'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useCountdownHover} from '../../composables/useCountdownHover'\n\nconst _props = withDefaults(defineProps<Omit<BAlertProps, 'modelValue'>>(), {\n  closeClass: undefined,\n  closeContent: undefined,\n  closeLabel: 'Close',\n  closeVariant: 'secondary',\n  dismissible: false,\n  fade: false,\n  immediate: true,\n  interval: 'requestAnimationFrame',\n  noHoverPause: false,\n  noResumeOnHoverLeave: false,\n  showOnPause: true,\n  variant: 'info',\n})\n\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<{\n  'close': []\n  'close-countdown': [value: number]\n  'closed': []\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  close?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<Exclude<BAlertProps['modelValue'], undefined>>({default: false})\n\nconst hasCloseSlot = computed(() => !isEmptySlot(slots.close))\nconst countdownLength = computed(() =>\n  typeof modelValue.value === 'boolean' ? 0 : modelValue.value\n)\n\nconst computedClasses = computed(() => ({\n  [`alert-${props.variant}`]: props.variant !== null,\n  'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n  isActive,\n  pause,\n  resume,\n  stop,\n  isPaused,\n  restart,\n  value: remainingMs,\n} = useCountdown(countdownLength, props.interval, {\n  immediate: typeof modelValue.value === 'number' && props.immediate,\n})\nuseCountdownHover(\n  element,\n  computed(() => ({\n    noHoverPause: props.noHoverPause,\n    noResumeOnHoverLeave: props.noResumeOnHoverLeave,\n  })),\n  {pause, resume}\n)\n\nconst isAlertVisible = computed(() =>\n  typeof modelValue.value === 'boolean'\n    ? modelValue.value\n    : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n  variant: hasCloseSlot.value ? props.closeVariant : undefined,\n  class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n  emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n  emit('close')\n\n  if (typeof modelValue.value === 'boolean') {\n    modelValue.value = false\n  } else {\n    modelValue.value = 0\n    stop()\n  }\n\n  emit('closed')\n}\n\ndefineExpose({\n  pause,\n  resume,\n  stop,\n  restart,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n"],"names":["_useSlots","_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,UAAM,SAAS;AAeT,UAAA,QAAQ,YAAY,QAAQ,QAAQ;AAE1C,UAAM,OAAO;AAMb,UAAM,QAAQA;AAOR,UAAA,UAAU,IAAwB,IAAI;AAEtC,UAAA,aAAaC,8BAA2E;AAE9F,UAAM,eAAe,SAAS,MAAM,CAAC,YAAY,MAAM,KAAK,CAAC;AAC7D,UAAM,kBAAkB;AAAA,MAAS,MAC/B,OAAO,WAAW,UAAU,YAAY,IAAI,WAAW;AAAA,IAAA;AAGnD,UAAA,kBAAkB,SAAS,OAAO;AAAA,MACtC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,MAAM,YAAY;AAAA,MAC9C,qBAAqB,MAAM;AAAA,IAC3B,EAAA;AAEI,UAAA,eAAe,SAAS,MAAM,CAAC,MAAM,YAAY,EAAC,oBAAoB,aAAa,MAAM,CAAA,CAAC;AAE1F,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACL,IAAA,aAAa,iBAAiB,MAAM,UAAU;AAAA,MAChD,WAAW,OAAO,WAAW,UAAU,YAAY,MAAM;AAAA,IAAA,CAC1D;AACD;AAAA,MACE;AAAA,MACA,SAAS,OAAO;AAAA,QACd,cAAc,MAAM;AAAA,QACpB,sBAAsB,MAAM;AAAA,MAAA,EAC5B;AAAA,MACF,EAAC,OAAO,OAAM;AAAA,IAAA;AAGhB,UAAM,iBAAiB;AAAA,MAAS,MAC9B,OAAO,WAAW,UAAU,YACxB,WAAW,QACX,SAAS,SAAU,MAAM,eAAe,SAAS;AAAA,IAAA;AAGjD,UAAA,aAAa,SAAS,OAAO;AAAA,MACjC,SAAS,aAAa,QAAQ,MAAM,eAAe;AAAA,MACnD,OAAO,aAAa;AAAA,IACpB,EAAA;AAEF,gBAAY,MAAM;AACX,WAAA,mBAAmB,YAAY,KAAK;AAAA,IAAA,CAC1C;AAED,UAAM,OAAO,MAAM;AACjB,WAAK,OAAO;AAER,UAAA,OAAO,WAAW,UAAU,WAAW;AACzC,mBAAW,QAAQ;AAAA,MAAA,OACd;AACL,mBAAW,QAAQ;AACd;MACP;AAEA,WAAK,QAAQ;AAAA,IAAA;AAGF,aAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}