{"version":3,"file":"BAlert-t4xRB7pC.mjs","sources":["../src/components/BAlert/BAlert.vue"],"sourcesContent":["<template>\n  <Transition\n    v-if=\"renderRef || contentShowing\"\n    v-bind=\"transitionProps\"\n    :appear=\"!!modelValue || props.visible\"\n  >\n    <div\n      v-show=\"isAlertVisible\"\n      :id=\"props.id\"\n      ref=\"_element\"\n      class=\"alert\"\n      :class=\"[props.alertClass, computedClasses]\"\n      tabindex=\"0\"\n      :role=\"!isAlertVisible ? undefined : props.isStatus ? 'status' : 'alert'\"\n      :aria-live=\"!isAlertVisible ? undefined : props.isStatus ? 'polite' : 'assertive'\"\n      :aria-atomic=\"!isAlertVisible ? undefined : true\"\n    >\n      <component\n        :is=\"props.headerTag\"\n        v-if=\"contentShowing && (slots.title || props.title)\"\n        class=\"alert-heading d-flex gap-2\"\n        :class=\"props.headerClass\"\n      >\n        <slot name=\"title\" v-bind=\"sharedSlots\">\n          <span>\n            {{ props.title }}\n          </span>\n        </slot>\n        <template v-if=\"props.dismissible\">\n          <BButton\n            v-if=\"slots.close || props.closeContent\"\n            :class=\"[props.closeClass]\"\n            class=\"ms-auto ps-1 btn-close-custom\"\n            :variant=\"props.closeVariant\"\n            @click.stop.prevent=\"hide('close')\"\n          >\n            <slot name=\"close\" v-bind=\"sharedSlots\">\n              {{ props.closeContent }}\n            </slot>\n          </BButton>\n          <BCloseButton\n            v-else\n            :aria-label=\"props.closeLabel\"\n            :class=\"[props.closeClass]\"\n            @click.stop.prevent=\"hide('close')\"\n          />\n        </template>\n      </component>\n      <template v-if=\"contentShowing && (slots.default || props.body)\">\n        <div class=\"d-flex gap-2\">\n          <component\n            :is=\"computedTag\"\n            class=\"alert-body\"\n            :class=\"props.bodyClass\"\n            v-bind=\"computedLinkProps\"\n            @click=\"computedLink && props.dismissible ? hide() : () => {}\"\n          >\n            <slot v-bind=\"sharedSlots\">\n              {{ props.body }}\n            </slot>\n          </component>\n\n          <template v-if=\"props.dismissible && !(slots.title || props.title)\">\n            <BButton\n              v-if=\"slots.close || props.closeContent\"\n              :class=\"[props.closeClass]\"\n              class=\"ms-auto btn-close-custom\"\n              :variant=\"props.closeVariant\"\n              @click.stop.prevent=\"hide('close')\"\n            >\n              <slot name=\"close\" v-bind=\"sharedSlots\">\n                {{ props.closeContent }}\n              </slot>\n            </BButton>\n            <BCloseButton\n              v-else\n              :aria-label=\"props.closeLabel\"\n              :class=\"[props.closeClass]\"\n              @click.stop.prevent=\"hide('close')\"\n            />\n          </template>\n        </div>\n      </template>\n      <BProgress\n        v-if=\"typeof modelValue === 'number' && props.progressProps !== undefined\"\n        :animated=\"props.progressProps.animated\"\n        :precision=\"props.progressProps.precision\"\n        :show-progress=\"props.progressProps.showProgress\"\n        :show-value=\"props.progressProps.showValue\"\n        :striped=\"props.progressProps.striped\"\n        :variant=\"props.progressProps.variant\"\n        :max=\"modelValue\"\n        :value=\"remainingMs\"\n        height=\"4px\"\n      />\n    </div>\n  </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type EmitFn, useTemplateRef, watch, watchEffect} from 'vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport type {BAlertProps} from '../../types/ComponentProps'\nimport type {BToastEmits} from '../../types/ComponentEmits'\nimport type {BToastSlots, ShowHideSlotsData} from '../../types/ComponentSlots'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BLink from '../BLink/BLink.vue'\nimport BProgress from '../BProgress/BProgress.vue'\nimport {useCountdown} from '../../composables/useCountdown'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useCountdownHover} from '../../composables/useCountdownHover'\nimport {useId} from '../../composables/useId'\nimport {useShowHide} from '../../composables/useShowHide'\n\nconst _props = withDefaults(defineProps<Omit<BAlertProps, 'modelValue'>>(), {\n  bgVariant: null,\n  body: undefined,\n  bodyClass: undefined,\n  closeClass: undefined,\n  closeContent: undefined,\n  closeLabel: 'Close',\n  closeVariant: 'secondary',\n  dismissible: false,\n  headerClass: undefined,\n  headerTag: 'div',\n  id: undefined,\n  initialAnimation: false,\n  interval: 'requestAnimationFrame',\n  isStatus: false,\n  lazy: false,\n  noFade: false,\n  noHoverPause: false,\n  noResumeOnHoverLeave: false,\n  progressProps: undefined,\n  unmountLazy: false,\n  showOnPause: true,\n  show: false,\n  solid: false,\n  textVariant: null,\n  title: undefined,\n  alertClass: undefined,\n  transProps: undefined,\n  visible: false,\n  // Link props\n  // All others use defaults\n  noRel: undefined,\n  active: undefined,\n  activeClass: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  stretched: false,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  // End link props\n  variant: 'info',\n})\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<BToastEmits>()\n\nconst slots = defineSlots<BToastSlots>()\n\nconst element = useTemplateRef<HTMLElement>('_element')\n\nconst modelValue = defineModel<Exclude<BAlertProps['modelValue'], undefined>>({default: false})\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst computedId = useId(() => props.id, 'alert')\n\nconst {\n  showRef,\n  renderRef,\n  hide,\n  toggle,\n  show,\n  buildTriggerableEvent,\n  computedNoAnimation,\n  isVisible,\n  transitionProps,\n  contentShowing,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId)\n\n// TODO solid is never used\nconst countdownLength = computed(() =>\n  typeof modelValue.value === 'boolean' ? 0 : modelValue.value\n)\n\nconst {\n  isActive,\n  pause,\n  restart,\n  resume,\n  stop,\n  isPaused,\n  value: remainingMs,\n} = useCountdown(countdownLength, props.interval, {\n  immediate: typeof modelValue.value === 'number' && !!modelValue.value,\n})\nuseCountdownHover(\n  element,\n  computed(() => ({\n    noHoverPause: props.noHoverPause || typeof modelValue.value !== 'number',\n    noResumeOnHoverLeave: props.noResumeOnHoverLeave || typeof modelValue.value !== 'number',\n    modelValueIgnoresHover: typeof modelValue.value === 'boolean',\n  })),\n  {pause, resume}\n)\n\nwatchEffect(() => {\n  emit('close-countdown', remainingMs.value)\n})\n\nconst computedTag = computed(() => (computedLink.value ? BLink : 'div'))\n\nconst isAlertVisible = computed(\n  () => showRef.value || isActive.value || (props.showOnPause && isPaused.value)\n)\n\n// const colorClasses = useColorVariantClasses(props)\nconst computedClasses = computed(() => [\n  // colorClasses.value,\n  {\n    [`alert-${props.variant}`]: props.variant !== null,\n    'alert-dismissible': props.dismissible && !(slots.close || props.closeContent),\n    'show': isVisible.value,\n    'fade': !computedNoAnimation.value,\n  },\n])\n\nwatch(modelValue, (newValue) => {\n  if (typeof newValue === 'number') {\n    const event = buildTriggerableEvent('show', {cancelable: true, trigger: 'model'})\n    emit('show', event)\n    if (event.defaultPrevented) {\n      emit('show-prevented', buildTriggerableEvent('show-prevented'))\n    } else {\n      restart()\n    }\n  }\n})\n\n// isActive in the composable will cause the alert to hide when the countdown is done\nwatch(isActive, (newValue) => {\n  if (newValue === false && isPaused.value === false) {\n    hide()\n    modelValue.value = 0\n    stop()\n  }\n})\nconst sharedSlots = computed<ShowHideSlotsData>(() => ({\n  toggle,\n  show,\n  hide,\n  id: computedId.value,\n  visible: showRef.value,\n  active: isActive.value,\n}))\n\ndefineExpose({\n  show,\n  hide,\n  toggle,\n  pause,\n  restart,\n  resume,\n  stop,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.alert :deep(.progress .progress-bar) {\n  --bs-progress-bar-transition: none;\n}\n\n.btn-close-custom {\n  margin-bottom: auto;\n  position: relative;\n}\n</style>\n"],"names":["_useSlots","_useModel","BLink"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkHA,UAAM,SAAS;AAsDT,UAAA,QAAQ,YAAY,QAAQ,QAAQ;AAE1C,UAAM,OAAO;AAEb,UAAM,QAAQA,SAAA;AAER,UAAA,UAAU,eAA4B,UAAU;AAEhD,UAAA,aAAaC,SAA2E,SAAA,YAAA;AAC9F,UAAM,EAAC,cAAc,sBAAqB,eAAe,KAAK;AAE9D,UAAM,aAAa,MAAM,MAAM,MAAM,IAAI,OAAO;AAE1C,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,IACE,YAAY,YAAY,OAAO,MAAgB,SAAS,UAAU;AAGtE,UAAM,kBAAkB;AAAA,MAAS,MAC/B,OAAO,WAAW,UAAU,YAAY,IAAI,WAAW;AAAA,IACzD;AAEM,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,CAAC,CAAC,WAAW;AAAA,IAAA,CACjE;AACD;AAAA,MACE;AAAA,MACA,SAAS,OAAO;AAAA,QACd,cAAc,MAAM,gBAAgB,OAAO,WAAW,UAAU;AAAA,QAChE,sBAAsB,MAAM,wBAAwB,OAAO,WAAW,UAAU;AAAA,QAChF,wBAAwB,OAAO,WAAW,UAAU;AAAA,MAAA,EACpD;AAAA,MACF,EAAC,OAAO,OAAM;AAAA,IAChB;AAEA,gBAAY,MAAM;AACX,WAAA,mBAAmB,YAAY,KAAK;AAAA,IAAA,CAC1C;AAED,UAAM,cAAc,SAAS,MAAO,aAAa,QAAQC,cAAQ,KAAM;AAEvE,UAAM,iBAAiB;AAAA,MACrB,MAAM,QAAQ,SAAS,SAAS,SAAU,MAAM,eAAe,SAAS;AAAA,IAC1E;AAGM,UAAA,kBAAkB,SAAS,MAAM;AAAA;AAAA,MAErC;AAAA,QACE,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,MAAM,YAAY;AAAA,QAC9C,qBAAqB,MAAM,eAAe,EAAE,MAAM,SAAS,MAAM;AAAA,QACjE,QAAQ,UAAU;AAAA,QAClB,QAAQ,CAAC,oBAAoB;AAAA,MAAA;AAAA,IAC/B,CACD;AAEK,UAAA,YAAY,CAAC,aAAa;AAC1B,UAAA,OAAO,aAAa,UAAU;AAC1B,cAAA,QAAQ,sBAAsB,QAAQ,EAAC,YAAY,MAAM,SAAS,SAAQ;AAChF,aAAK,QAAQ,KAAK;AAClB,YAAI,MAAM,kBAAkB;AACrB,eAAA,kBAAkB,sBAAsB,gBAAgB,CAAC;AAAA,QAAA,OACzD;AACG,kBAAA;AAAA,QAAA;AAAA,MACV;AAAA,IACF,CACD;AAGK,UAAA,UAAU,CAAC,aAAa;AAC5B,UAAI,aAAa,SAAS,SAAS,UAAU,OAAO;AAC7C,aAAA;AACL,mBAAW,QAAQ;AACd,aAAA;AAAA,MAAA;AAAA,IACP,CACD;AACK,UAAA,cAAc,SAA4B,OAAO;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,WAAW;AAAA,MACf,SAAS,QAAQ;AAAA,MACjB,QAAQ,SAAS;AAAA,IAAA,EACjB;AAEW,aAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}