{"version":3,"file":"BCarousel-D81alfFC.mjs","names":[],"sources":["../src/utils/getSlotElements.ts","../src/components/BCarousel/BCarousel.vue","../src/components/BCarousel/BCarousel.vue","../src/components/BCarousel/BCarouselSlide.vue","../src/components/BCarousel/BCarouselSlide.vue"],"sourcesContent":["import type {Slot, VNode} from 'vue'\n\nexport const getSlotElements = (slot: Slot | undefined, filterBy: string): VNode[] =>\n  (slot?.() ?? [])\n    .reduce((arr: VNode[], slot: VNode) => {\n      if (typeof slot.type === 'symbol') {\n        arr = arr.concat(slot.children as unknown as VNode)\n      } else {\n        arr.push(slot)\n      }\n      return arr\n    }, [])\n    .filter((child) => (child.type as {__name: string} | undefined)?.__name === filterBy)\n","<template>\n  <div\n    :id=\"computedId\"\n    ref=\"_element\"\n    class=\"carousel slide pointer-event\"\n    :class=\"computedClasses\"\n  >\n    <div\n      v-if=\"props.indicators\"\n      class=\"carousel-indicators\"\n      :aria-label=\"props.labelIndicators\"\n      :aria-owns=\"buttonOwnership\"\n    >\n      <!-- :data-bs-target=\"`#${computedId}`\" is required since the classes target elems with that attr -->\n      <button\n        v-for=\"(_, i) in slides.length\"\n        :key=\"i\"\n        type=\"button\"\n        data-bs-target=\"\"\n        :class=\"i === modelValue ? 'active' : ''\"\n        :aria-current=\"i === modelValue ? true : undefined\"\n        :aria-label=\"`${props.indicatorsButtonLabel} ${i}`\"\n        :aria-controls=\"buttonOwnership\"\n        :aria-describedby=\"slideValues?.[i]?._id\"\n        @click=\"goToValue(i)\"\n      />\n    </div>\n\n    <div ref=\"_relatedTarget\" class=\"carousel-inner\">\n      <TransitionGroup\n        :enter-from-class=\"enterClasses\"\n        :enter-active-class=\"enterClasses\"\n        :enter-to-class=\"enterClasses\"\n        :leave-from-class=\"leaveClasses\"\n        :leave-active-class=\"leaveClasses\"\n        :leave-to-class=\"leaveClasses\"\n        @before-leave=\"onBeforeLeave\"\n        @after-leave=\"onAfterLeave\"\n        @after-enter=\"onAfterEnter\"\n        @enter=\"onEnter\"\n      >\n        <component\n          :is=\"slide\"\n          v-for=\"(slide, i) in slides\"\n          v-show=\"i === modelValue\"\n          :key=\"i\"\n          ref=\"_slideValues\"\n          :class=\"{active: i === modelValue && isTransitioning === false}\"\n          :style=\"props.noAnimation && {transition: 'none'}\"\n        />\n      </TransitionGroup>\n    </div>\n\n    <template v-if=\"props.controls\">\n      <button class=\"carousel-control-prev\" type=\"button\" @click=\"onClickPrev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ props.controlsPrevText }}</span>\n      </button>\n      <button class=\"carousel-control-next\" type=\"button\" @click=\"onClickNext\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ props.controlsNextText }}</span>\n      </button>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvCarouselEvent} from '../../utils'\nimport {computed, onMounted, provide, ref, toRef, useTemplateRef, watch} from 'vue'\nimport {useId} from '../../composables/useId'\nimport type {BCarouselProps} from '../../types/ComponentProps'\nimport {onKeyStroke, useElementHover, useIntervalFn, useSwipe, useToNumber} from '@vueuse/core'\nimport type BCarouselSlide from './BCarouselSlide.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {Numberish} from '../../types/CommonTypes'\nimport {getSlotElements} from '../../utils/getSlotElements'\nimport {carouselInjectionKey} from '../../utils/keys'\nimport type {BCarouselEmits, BCarouselSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BCarouselProps, 'modelValue'>>(), {\n  background: undefined,\n  controls: false,\n  controlsNextText: 'Next',\n  controlsPrevText: 'Previous',\n  fade: false,\n  id: undefined,\n  imgHeight: undefined,\n  imgWidth: undefined,\n  indicators: false,\n  indicatorsButtonLabel: 'Slide',\n  interval: 5000,\n  labelIndicators: 'Select a slide to display',\n  keyboard: true,\n  noAnimation: false,\n  noHoverPause: false,\n  noTouch: false,\n  noWrap: false,\n  ride: false,\n  rideReverse: false,\n  touchThreshold: 50,\n})\nconst props = useDefaults(_props, 'BCarousel')\nconst emit = defineEmits<BCarouselEmits>()\nconst slots = defineSlots<BCarouselSlots>()\n\nconst computedId = useId(() => props.id, 'carousel')\nconst buttonOwnership = useId(undefined, 'carousel-button-ownership')\n\nconst modelValue = defineModel<Exclude<BCarouselProps['modelValue'], undefined>>({default: 0})\n\nconst slideValues = useTemplateRef<InstanceType<typeof BCarouselSlide>[]>('_slideValues')\n\nconst touchThresholdNumber = useToNumber(() => props.touchThreshold)\nconst slideInterval = ref<Numberish | null>(null)\nonMounted(() => {\n  slideInterval.value =\n    slideValues.value?.find((slid) => slid.$el.style.display !== 'none')?._interval ?? null\n})\nconst intervalNumber = useToNumber(() => slideInterval.value ?? props.interval)\n\nconst isTransitioning = ref(false)\nconst rideStarted = ref(false)\nconst direction = ref(true)\nconst relatedTarget = useTemplateRef('_relatedTarget')\nconst element = useTemplateRef('_element')\nconst previousModelValue = ref(modelValue.value)\n\nconst isHovering = useElementHover(element)\n\n// Class carousel-item is a static property\n// If you make it static, the direction can be reversed -- properly (atm it does the carousel-item-${} logic backwards for entering, a weird hack)\n// So all that would be great. However, when you do this, it will break the transition flow. Something about it breaks and I'm not sure why!\n// Try it by removing carousel-item from below and making `!direction.value` => `direction.value` for enter\n// Then reviewing the behavior\nconst enterClasses = computed(\n  () =>\n    `carousel-item carousel-item-${!direction.value ? 'next' : 'prev'} carousel-item-${\n      !direction.value ? 'start' : 'end'\n    }`\n)\nconst leaveClasses = computed(\n  () => `carousel-item active carousel-item-${direction.value ? 'start' : 'end'}`\n)\n\nconst {pause, resume} = useIntervalFn(\n  () => {\n    if (props.rideReverse) {\n      prev()\n      return\n    }\n    next()\n  },\n  intervalNumber,\n  {immediate: props.ride === 'carousel'}\n)\n\nconst isRiding = computed(\n  () => (props.ride === true && rideStarted.value === true) || props.ride === 'carousel'\n)\nconst slides = computed(() => getSlotElements(slots.default, 'BCarouselSlide'))\nconst computedClasses = computed(() => ({'carousel-fade': props.fade}))\n\nconst buildBvCarouselEvent = (event: 'slid' | 'slide') =>\n  new BvCarouselEvent(event, {\n    componentId: computedId.value,\n    cancelable: false,\n    target: element.value,\n    direction: direction.value ? 'right' : 'left',\n    from: previousModelValue.value,\n    to: modelValue.value,\n    relatedTarget: relatedTarget.value?.children[modelValue.value] ?? null,\n  })\n\nconst goToValue = (value: number): void => {\n  if (isTransitioning.value === true) return\n\n  if (props.ride === true) {\n    rideStarted.value = true\n  }\n  if (isRiding.value === true) {\n    resume()\n  }\n  direction.value = value < modelValue.value ? false : true\n  if (value >= slides.value.length) {\n    if (props.noWrap) return\n    modelValue.value = 0\n    return\n  }\n  if (value < 0) {\n    if (props.noWrap) return\n    modelValue.value = slides.value.length - 1\n    return\n  }\n  previousModelValue.value = modelValue.value\n  modelValue.value = value\n}\n\nconst prev = (): void => {\n  goToValue(modelValue.value - 1)\n}\nconst next = (): void => {\n  goToValue(modelValue.value + 1)\n}\n\nconst onKeydown = (fn: () => void) => {\n  if (props.keyboard === false) return\n  fn()\n}\n\nconst onMouseEnter = () => {\n  if (props.noHoverPause) return\n  pause()\n}\nconst onMouseLeave = () => {\n  if (!isRiding.value) return\n  resume()\n}\n\nconst {lengthX} = useSwipe(element, {\n  passive: true,\n  onSwipeStart() {\n    if (props.noTouch === true) return\n    pause()\n  },\n  onSwipeEnd() {\n    if (props.noTouch === true) return\n    const resumeRiding = () => {\n      if (isRiding.value === false) return\n      resume()\n    }\n    if (lengthX.value >= touchThresholdNumber.value) {\n      next()\n      resumeRiding()\n      return\n    }\n    if (lengthX.value <= -touchThresholdNumber.value) {\n      prev()\n      resumeRiding()\n    }\n  },\n})\n\nconst onBeforeLeave = () => {\n  emit('slide', buildBvCarouselEvent('slide'))\n  isTransitioning.value = true\n}\nconst onAfterLeave = () => {\n  emit('slid', buildBvCarouselEvent('slid'))\n  isTransitioning.value = false\n}\n// carousel-item class is removed from the slide during the transition,\n// as is included within enter classes.\n// The first slide recovers carousel-item class,\nconst onAfterEnter = (el: Readonly<Element>) => {\n  if (modelValue.value !== 0) {\n    el.classList.add('carousel-item')\n  }\n}\nconst onEnter = (el: Readonly<Element>) => {\n  slideInterval.value = slideValues.value?.find((slid) => slid.$el === el)?._interval ?? null\n}\n\nonKeyStroke(\n  'ArrowLeft',\n  () => {\n    onKeydown(prev)\n  },\n  {target: element}\n)\nonKeyStroke(\n  'ArrowRight',\n  () => {\n    onKeydown(next)\n  },\n  {target: element, passive: true}\n)\n\nwatch(\n  () => props.ride,\n  () => {\n    rideStarted.value = false\n  }\n)\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  onMouseLeave()\n})\n\nconst onClickPrev = (event: MouseEvent) => {\n  emit('prev-click', event)\n  if (event.defaultPrevented) return\n  prev()\n}\nconst onClickNext = (event: MouseEvent) => {\n  emit('next-click', event)\n  if (event.defaultPrevented) return\n  next()\n}\n\ndefineExpose({\n  next,\n  pause,\n  prev,\n  resume,\n})\n\nprovide(carouselInjectionKey, {\n  background: toRef(() => props.background),\n  width: toRef(() => props.imgWidth),\n  height: toRef(() => props.imgHeight),\n})\n</script>\n","<template>\n  <div\n    :id=\"computedId\"\n    ref=\"_element\"\n    class=\"carousel slide pointer-event\"\n    :class=\"computedClasses\"\n  >\n    <div\n      v-if=\"props.indicators\"\n      class=\"carousel-indicators\"\n      :aria-label=\"props.labelIndicators\"\n      :aria-owns=\"buttonOwnership\"\n    >\n      <!-- :data-bs-target=\"`#${computedId}`\" is required since the classes target elems with that attr -->\n      <button\n        v-for=\"(_, i) in slides.length\"\n        :key=\"i\"\n        type=\"button\"\n        data-bs-target=\"\"\n        :class=\"i === modelValue ? 'active' : ''\"\n        :aria-current=\"i === modelValue ? true : undefined\"\n        :aria-label=\"`${props.indicatorsButtonLabel} ${i}`\"\n        :aria-controls=\"buttonOwnership\"\n        :aria-describedby=\"slideValues?.[i]?._id\"\n        @click=\"goToValue(i)\"\n      />\n    </div>\n\n    <div ref=\"_relatedTarget\" class=\"carousel-inner\">\n      <TransitionGroup\n        :enter-from-class=\"enterClasses\"\n        :enter-active-class=\"enterClasses\"\n        :enter-to-class=\"enterClasses\"\n        :leave-from-class=\"leaveClasses\"\n        :leave-active-class=\"leaveClasses\"\n        :leave-to-class=\"leaveClasses\"\n        @before-leave=\"onBeforeLeave\"\n        @after-leave=\"onAfterLeave\"\n        @after-enter=\"onAfterEnter\"\n        @enter=\"onEnter\"\n      >\n        <component\n          :is=\"slide\"\n          v-for=\"(slide, i) in slides\"\n          v-show=\"i === modelValue\"\n          :key=\"i\"\n          ref=\"_slideValues\"\n          :class=\"{active: i === modelValue && isTransitioning === false}\"\n          :style=\"props.noAnimation && {transition: 'none'}\"\n        />\n      </TransitionGroup>\n    </div>\n\n    <template v-if=\"props.controls\">\n      <button class=\"carousel-control-prev\" type=\"button\" @click=\"onClickPrev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ props.controlsPrevText }}</span>\n      </button>\n      <button class=\"carousel-control-next\" type=\"button\" @click=\"onClickNext\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ props.controlsNextText }}</span>\n      </button>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvCarouselEvent} from '../../utils'\nimport {computed, onMounted, provide, ref, toRef, useTemplateRef, watch} from 'vue'\nimport {useId} from '../../composables/useId'\nimport type {BCarouselProps} from '../../types/ComponentProps'\nimport {onKeyStroke, useElementHover, useIntervalFn, useSwipe, useToNumber} from '@vueuse/core'\nimport type BCarouselSlide from './BCarouselSlide.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {Numberish} from '../../types/CommonTypes'\nimport {getSlotElements} from '../../utils/getSlotElements'\nimport {carouselInjectionKey} from '../../utils/keys'\nimport type {BCarouselEmits, BCarouselSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BCarouselProps, 'modelValue'>>(), {\n  background: undefined,\n  controls: false,\n  controlsNextText: 'Next',\n  controlsPrevText: 'Previous',\n  fade: false,\n  id: undefined,\n  imgHeight: undefined,\n  imgWidth: undefined,\n  indicators: false,\n  indicatorsButtonLabel: 'Slide',\n  interval: 5000,\n  labelIndicators: 'Select a slide to display',\n  keyboard: true,\n  noAnimation: false,\n  noHoverPause: false,\n  noTouch: false,\n  noWrap: false,\n  ride: false,\n  rideReverse: false,\n  touchThreshold: 50,\n})\nconst props = useDefaults(_props, 'BCarousel')\nconst emit = defineEmits<BCarouselEmits>()\nconst slots = defineSlots<BCarouselSlots>()\n\nconst computedId = useId(() => props.id, 'carousel')\nconst buttonOwnership = useId(undefined, 'carousel-button-ownership')\n\nconst modelValue = defineModel<Exclude<BCarouselProps['modelValue'], undefined>>({default: 0})\n\nconst slideValues = useTemplateRef<InstanceType<typeof BCarouselSlide>[]>('_slideValues')\n\nconst touchThresholdNumber = useToNumber(() => props.touchThreshold)\nconst slideInterval = ref<Numberish | null>(null)\nonMounted(() => {\n  slideInterval.value =\n    slideValues.value?.find((slid) => slid.$el.style.display !== 'none')?._interval ?? null\n})\nconst intervalNumber = useToNumber(() => slideInterval.value ?? props.interval)\n\nconst isTransitioning = ref(false)\nconst rideStarted = ref(false)\nconst direction = ref(true)\nconst relatedTarget = useTemplateRef('_relatedTarget')\nconst element = useTemplateRef('_element')\nconst previousModelValue = ref(modelValue.value)\n\nconst isHovering = useElementHover(element)\n\n// Class carousel-item is a static property\n// If you make it static, the direction can be reversed -- properly (atm it does the carousel-item-${} logic backwards for entering, a weird hack)\n// So all that would be great. However, when you do this, it will break the transition flow. Something about it breaks and I'm not sure why!\n// Try it by removing carousel-item from below and making `!direction.value` => `direction.value` for enter\n// Then reviewing the behavior\nconst enterClasses = computed(\n  () =>\n    `carousel-item carousel-item-${!direction.value ? 'next' : 'prev'} carousel-item-${\n      !direction.value ? 'start' : 'end'\n    }`\n)\nconst leaveClasses = computed(\n  () => `carousel-item active carousel-item-${direction.value ? 'start' : 'end'}`\n)\n\nconst {pause, resume} = useIntervalFn(\n  () => {\n    if (props.rideReverse) {\n      prev()\n      return\n    }\n    next()\n  },\n  intervalNumber,\n  {immediate: props.ride === 'carousel'}\n)\n\nconst isRiding = computed(\n  () => (props.ride === true && rideStarted.value === true) || props.ride === 'carousel'\n)\nconst slides = computed(() => getSlotElements(slots.default, 'BCarouselSlide'))\nconst computedClasses = computed(() => ({'carousel-fade': props.fade}))\n\nconst buildBvCarouselEvent = (event: 'slid' | 'slide') =>\n  new BvCarouselEvent(event, {\n    componentId: computedId.value,\n    cancelable: false,\n    target: element.value,\n    direction: direction.value ? 'right' : 'left',\n    from: previousModelValue.value,\n    to: modelValue.value,\n    relatedTarget: relatedTarget.value?.children[modelValue.value] ?? null,\n  })\n\nconst goToValue = (value: number): void => {\n  if (isTransitioning.value === true) return\n\n  if (props.ride === true) {\n    rideStarted.value = true\n  }\n  if (isRiding.value === true) {\n    resume()\n  }\n  direction.value = value < modelValue.value ? false : true\n  if (value >= slides.value.length) {\n    if (props.noWrap) return\n    modelValue.value = 0\n    return\n  }\n  if (value < 0) {\n    if (props.noWrap) return\n    modelValue.value = slides.value.length - 1\n    return\n  }\n  previousModelValue.value = modelValue.value\n  modelValue.value = value\n}\n\nconst prev = (): void => {\n  goToValue(modelValue.value - 1)\n}\nconst next = (): void => {\n  goToValue(modelValue.value + 1)\n}\n\nconst onKeydown = (fn: () => void) => {\n  if (props.keyboard === false) return\n  fn()\n}\n\nconst onMouseEnter = () => {\n  if (props.noHoverPause) return\n  pause()\n}\nconst onMouseLeave = () => {\n  if (!isRiding.value) return\n  resume()\n}\n\nconst {lengthX} = useSwipe(element, {\n  passive: true,\n  onSwipeStart() {\n    if (props.noTouch === true) return\n    pause()\n  },\n  onSwipeEnd() {\n    if (props.noTouch === true) return\n    const resumeRiding = () => {\n      if (isRiding.value === false) return\n      resume()\n    }\n    if (lengthX.value >= touchThresholdNumber.value) {\n      next()\n      resumeRiding()\n      return\n    }\n    if (lengthX.value <= -touchThresholdNumber.value) {\n      prev()\n      resumeRiding()\n    }\n  },\n})\n\nconst onBeforeLeave = () => {\n  emit('slide', buildBvCarouselEvent('slide'))\n  isTransitioning.value = true\n}\nconst onAfterLeave = () => {\n  emit('slid', buildBvCarouselEvent('slid'))\n  isTransitioning.value = false\n}\n// carousel-item class is removed from the slide during the transition,\n// as is included within enter classes.\n// The first slide recovers carousel-item class,\nconst onAfterEnter = (el: Readonly<Element>) => {\n  if (modelValue.value !== 0) {\n    el.classList.add('carousel-item')\n  }\n}\nconst onEnter = (el: Readonly<Element>) => {\n  slideInterval.value = slideValues.value?.find((slid) => slid.$el === el)?._interval ?? null\n}\n\nonKeyStroke(\n  'ArrowLeft',\n  () => {\n    onKeydown(prev)\n  },\n  {target: element}\n)\nonKeyStroke(\n  'ArrowRight',\n  () => {\n    onKeydown(next)\n  },\n  {target: element, passive: true}\n)\n\nwatch(\n  () => props.ride,\n  () => {\n    rideStarted.value = false\n  }\n)\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  onMouseLeave()\n})\n\nconst onClickPrev = (event: MouseEvent) => {\n  emit('prev-click', event)\n  if (event.defaultPrevented) return\n  prev()\n}\nconst onClickNext = (event: MouseEvent) => {\n  emit('next-click', event)\n  if (event.defaultPrevented) return\n  next()\n}\n\ndefineExpose({\n  next,\n  pause,\n  prev,\n  resume,\n})\n\nprovide(carouselInjectionKey, {\n  background: toRef(() => props.background),\n  width: toRef(() => props.imgWidth),\n  height: toRef(() => props.imgHeight),\n})\n</script>\n","<template>\n  <div :id=\"computedId\" class=\"carousel-item\" :style=\"computedStyle\">\n    <slot name=\"img\">\n      <BImg\n        class=\"d-block w-100\"\n        :alt=\"props.imgAlt\"\n        :srcset=\"props.imgSrcset\"\n        :src=\"props.imgSrc\"\n        :width=\"props.imgWidth || parentData?.width.value\"\n        :height=\"props.imgHeight || parentData?.height.value\"\n        :blank=\"props.imgBlank\"\n        :blank-color=\"props.imgBlankColor\"\n      />\n    </slot>\n    <component\n      :is=\"props.contentTag\"\n      v-if=\"hasContent\"\n      class=\"carousel-caption\"\n      :class=\"computedContentClasses\"\n    >\n      <component :is=\"props.captionTag\" v-if=\"hasCaption\">\n        <slot name=\"caption\">\n          <span>{{ props.caption }}</span>\n        </slot>\n      </component>\n      <component :is=\"props.textTag\" v-if=\"hasText\">\n        <slot name=\"text\">\n          <span>{{ props.text }}</span>\n        </slot>\n      </component>\n      <slot />\n    </component>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, inject, toRef} from 'vue'\nimport type {BCarouselSlideProps} from '../../types/ComponentProps'\nimport {carouselInjectionKey} from '../../utils/keys'\nimport BImg from '../BImg/BImg.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useId} from '../../composables/useId'\nimport type {BCarouselSlideSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BCarouselSlideProps>(), {\n  background: undefined,\n  caption: undefined,\n  captionTag: 'h3',\n  contentTag: 'div',\n  contentVisibleUp: undefined,\n  id: undefined,\n  imgAlt: undefined,\n  imgBlank: false,\n  imgBlankColor: 'transparent',\n  imgHeight: undefined,\n  imgSrc: undefined,\n  imgSrcset: undefined,\n  imgWidth: undefined,\n  interval: undefined,\n  text: undefined,\n  textTag: 'p',\n})\nconst props = useDefaults(_props, 'BCarouselSlide')\nconst slots = defineSlots<BCarouselSlideSlots>()\n\nconst computedId = useId(() => props.id, 'carousel-slide')\nconst parentData = inject(carouselInjectionKey, null)\n\nconst hasText = computed(() => props.text || !isEmptySlot(slots.text))\nconst hasCaption = computed(() => props.caption || !isEmptySlot(slots.caption))\nconst hasContent = computed(() => hasText.value || hasCaption.value || !isEmptySlot(slots.default))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  background: `${\n    props.background || parentData?.background.value || 'rgb(171, 171, 171)'\n  } none repeat scroll 0% 0%`,\n}))\n\nconst computedContentClasses = computed(() => ({\n  'd-none': props.contentVisibleUp !== undefined,\n  [`d-${props.contentVisibleUp}-block`]: props.contentVisibleUp !== undefined,\n}))\n\ndefineExpose({\n  _interval: toRef(() => props.interval),\n  _id: computedId,\n})\n</script>\n","<template>\n  <div :id=\"computedId\" class=\"carousel-item\" :style=\"computedStyle\">\n    <slot name=\"img\">\n      <BImg\n        class=\"d-block w-100\"\n        :alt=\"props.imgAlt\"\n        :srcset=\"props.imgSrcset\"\n        :src=\"props.imgSrc\"\n        :width=\"props.imgWidth || parentData?.width.value\"\n        :height=\"props.imgHeight || parentData?.height.value\"\n        :blank=\"props.imgBlank\"\n        :blank-color=\"props.imgBlankColor\"\n      />\n    </slot>\n    <component\n      :is=\"props.contentTag\"\n      v-if=\"hasContent\"\n      class=\"carousel-caption\"\n      :class=\"computedContentClasses\"\n    >\n      <component :is=\"props.captionTag\" v-if=\"hasCaption\">\n        <slot name=\"caption\">\n          <span>{{ props.caption }}</span>\n        </slot>\n      </component>\n      <component :is=\"props.textTag\" v-if=\"hasText\">\n        <slot name=\"text\">\n          <span>{{ props.text }}</span>\n        </slot>\n      </component>\n      <slot />\n    </component>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, inject, toRef} from 'vue'\nimport type {BCarouselSlideProps} from '../../types/ComponentProps'\nimport {carouselInjectionKey} from '../../utils/keys'\nimport BImg from '../BImg/BImg.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useId} from '../../composables/useId'\nimport type {BCarouselSlideSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BCarouselSlideProps>(), {\n  background: undefined,\n  caption: undefined,\n  captionTag: 'h3',\n  contentTag: 'div',\n  contentVisibleUp: undefined,\n  id: undefined,\n  imgAlt: undefined,\n  imgBlank: false,\n  imgBlankColor: 'transparent',\n  imgHeight: undefined,\n  imgSrc: undefined,\n  imgSrcset: undefined,\n  imgWidth: undefined,\n  interval: undefined,\n  text: undefined,\n  textTag: 'p',\n})\nconst props = useDefaults(_props, 'BCarouselSlide')\nconst slots = defineSlots<BCarouselSlideSlots>()\n\nconst computedId = useId(() => props.id, 'carousel-slide')\nconst parentData = inject(carouselInjectionKey, null)\n\nconst hasText = computed(() => props.text || !isEmptySlot(slots.text))\nconst hasCaption = computed(() => props.caption || !isEmptySlot(slots.caption))\nconst hasContent = computed(() => hasText.value || hasCaption.value || !isEmptySlot(slots.default))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  background: `${\n    props.background || parentData?.background.value || 'rgb(171, 171, 171)'\n  } none repeat scroll 0% 0%`,\n}))\n\nconst computedContentClasses = computed(() => ({\n  'd-none': props.contentVisibleUp !== undefined,\n  [`d-${props.contentVisibleUp}-block`]: props.contentVisibleUp !== undefined,\n}))\n\ndefineExpose({\n  _interval: toRef(() => props.interval),\n  _id: computedId,\n})\n</script>\n"],"mappings":";;;;;;;;;AAEA,IAAa,mBAAmB,MAAwB,cACrD,QAAQ,IAAI,EAAE,EACZ,QAAQ,KAAc,SAAgB;AACrC,KAAI,OAAO,KAAK,SAAS,SACvB,OAAM,IAAI,OAAO,KAAK,SAA6B;KAEnD,KAAI,KAAK,KAAK;AAEhB,QAAO;GACN,EAAE,CAAC,CACL,QAAQ,UAAW,MAAM,MAAuC,WAAW,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECyFzF,MAAM,QAAQ,YAtBC,SAsBmB,YAAW;EAC7C,MAAM,OAAO;EACb,MAAM,QAAQ,UAAA;EAEd,MAAM,aAAa,cAAY,MAAM,IAAI,WAAU;EACnD,MAAM,kBAAkB,QAAM,KAAA,GAAW,4BAA2B;EAEpE,MAAM,aAAa,SAA6D,SAAA,aAAa;EAE7F,MAAM,cAAc,eAAsD,eAAc;EAExF,MAAM,uBAAuB,kBAAkB,MAAM,eAAc;EACnE,MAAM,gBAAgB,IAAsB,KAAI;AAChD,kBAAgB;AACd,iBAAc,QACZ,YAAY,OAAO,MAAM,SAAS,KAAK,IAAI,MAAM,YAAY,OAAO,EAAE,aAAa;IACtF;EACD,MAAM,iBAAiB,kBAAkB,cAAc,SAAS,MAAM,SAAQ;EAE9E,MAAM,kBAAkB,IAAI,MAAK;EACjC,MAAM,cAAc,IAAI,MAAK;EAC7B,MAAM,YAAY,IAAI,KAAI;EAC1B,MAAM,gBAAgB,eAAe,iBAAgB;EACrD,MAAM,UAAU,eAAe,WAAU;EACzC,MAAM,qBAAqB,IAAI,WAAW,MAAK;EAE/C,MAAM,aAAa,gBAAgB,QAAO;EAO1C,MAAM,eAAe,eAEjB,+BAA+B,CAAC,UAAU,QAAQ,SAAS,OAAO,iBAChE,CAAC,UAAU,QAAQ,UAAU,QAEnC;EACA,MAAM,eAAe,eACb,sCAAsC,UAAU,QAAQ,UAAU,QAC1E;EAEA,MAAM,EAAC,OAAO,WAAU,oBAChB;AACJ,OAAI,MAAM,aAAa;AACrB,UAAK;AACL;;AAEF,SAAK;KAEP,gBACA,EAAC,WAAW,MAAM,SAAS,YAAU,CACvC;EAEA,MAAM,WAAW,eACR,MAAM,SAAS,QAAQ,YAAY,UAAU,QAAS,MAAM,SAAS,WAC9E;EACA,MAAM,SAAS,eAAe,gBAAgB,MAAM,SAAS,iBAAiB,CAAA;EAC9E,MAAM,kBAAkB,gBAAgB,EAAC,iBAAiB,MAAM,MAAK,EAAC;EAEtE,MAAM,wBAAwB,UAC5B,IAAI,gBAAgB,OAAO;GACzB,aAAa,WAAW;GACxB,YAAY;GACZ,QAAQ,QAAQ;GAChB,WAAW,UAAU,QAAQ,UAAU;GACvC,MAAM,mBAAmB;GACzB,IAAI,WAAW;GACf,eAAe,cAAc,OAAO,SAAS,WAAW,UAAU;GACnE,CAAA;EAEH,MAAM,aAAa,UAAwB;AACzC,OAAI,gBAAgB,UAAU,KAAM;AAEpC,OAAI,MAAM,SAAS,KACjB,aAAY,QAAQ;AAEtB,OAAI,SAAS,UAAU,KACrB,SAAO;AAET,aAAU,QAAQ,QAAQ,WAAW,QAAQ,QAAQ;AACrD,OAAI,SAAS,OAAO,MAAM,QAAQ;AAChC,QAAI,MAAM,OAAQ;AAClB,eAAW,QAAQ;AACnB;;AAEF,OAAI,QAAQ,GAAG;AACb,QAAI,MAAM,OAAQ;AAClB,eAAW,QAAQ,OAAO,MAAM,SAAS;AACzC;;AAEF,sBAAmB,QAAQ,WAAW;AACtC,cAAW,QAAQ;;EAGrB,MAAM,aAAmB;AACvB,aAAU,WAAW,QAAQ,EAAC;;EAEhC,MAAM,aAAmB;AACvB,aAAU,WAAW,QAAQ,EAAC;;EAGhC,MAAM,aAAa,OAAmB;AACpC,OAAI,MAAM,aAAa,MAAO;AAC9B,OAAG;;EAGL,MAAM,qBAAqB;AACzB,OAAI,MAAM,aAAc;AACxB,UAAM;;EAER,MAAM,qBAAqB;AACzB,OAAI,CAAC,SAAS,MAAO;AACrB,WAAO;;EAGT,MAAM,EAAC,YAAW,SAAS,SAAS;GAClC,SAAS;GACT,eAAe;AACb,QAAI,MAAM,YAAY,KAAM;AAC5B,WAAM;;GAER,aAAa;AACX,QAAI,MAAM,YAAY,KAAM;IAC5B,MAAM,qBAAqB;AACzB,SAAI,SAAS,UAAU,MAAO;AAC9B,aAAO;;AAET,QAAI,QAAQ,SAAS,qBAAqB,OAAO;AAC/C,WAAK;AACL,mBAAa;AACb;;AAEF,QAAI,QAAQ,SAAS,CAAC,qBAAqB,OAAO;AAChD,WAAK;AACL,mBAAa;;;GAGlB,CAAA;EAED,MAAM,sBAAsB;AAC1B,QAAK,SAAS,qBAAqB,QAAQ,CAAA;AAC3C,mBAAgB,QAAQ;;EAE1B,MAAM,qBAAqB;AACzB,QAAK,QAAQ,qBAAqB,OAAO,CAAA;AACzC,mBAAgB,QAAQ;;EAK1B,MAAM,gBAAgB,OAA0B;AAC9C,OAAI,WAAW,UAAU,EACvB,IAAG,UAAU,IAAI,gBAAe;;EAGpC,MAAM,WAAW,OAA0B;AACzC,iBAAc,QAAQ,YAAY,OAAO,MAAM,SAAS,KAAK,QAAQ,GAAG,EAAE,aAAa;;AAGzF,cACE,mBACM;AACJ,aAAU,KAAI;KAEhB,EAAC,QAAQ,SAAO,CAClB;AACA,cACE,oBACM;AACJ,aAAU,KAAI;KAEhB;GAAC,QAAQ;GAAS,SAAS;GAAI,CACjC;AAEA,cACQ,MAAM,YACN;AACJ,eAAY,QAAQ;IAExB;AAEA,QAAM,aAAa,aAAa;AAC9B,OAAI,UAAU;AACZ,kBAAa;AACb;;AAEF,iBAAa;IACd;EAED,MAAM,eAAe,UAAsB;AACzC,QAAK,cAAc,MAAK;AACxB,OAAI,MAAM,iBAAkB;AAC5B,SAAK;;EAEP,MAAM,eAAe,UAAsB;AACzC,QAAK,cAAc,MAAK;AACxB,OAAI,MAAM,iBAAkB;AAC5B,SAAK;;AAGP,WAAa;GACX;GACA;GACA;GACA;GACD,CAAA;AAED,UAAQ,sBAAsB;GAC5B,YAAY,YAAY,MAAM,WAAW;GACzC,OAAO,YAAY,MAAM,SAAS;GAClC,QAAQ,YAAY,MAAM,UAAA;GAC3B,CAAA;;uBAzTC,mBA8DM,OAAA;IA7DH,IAAI,MAAA,WAAU;IACf,KAAI;IACJ,OAAK,eAAA,CAAC,gCACE,gBAAA,MAAe,CAAA;;IAGf,MAAA,MAAK,CAAC,cAAA,WAAA,EADd,mBAmBM,OAAA;;KAjBJ,OAAM;KACL,cAAY,MAAA,MAAK,CAAC;KAClB,aAAW,MAAA,gBAAA;0BAGZ,mBAWE,UAAA,MAAA,WAViB,OAAA,MAAO,SAAhB,GAAG,MAAC;yBADd,mBAWE,UAAA;MATC,KAAK;MACN,MAAK;MACL,kBAAe;MACd,OAAK,eAAE,MAAM,WAAA,QAAU,WAAA,GAAA;MACvB,gBAAc,MAAM,WAAA,QAAU,OAAU,KAAA;MACxC,cAAU,GAAK,MAAA,MAAK,CAAC,sBAAqB,GAAI;MAC9C,iBAAe,MAAA,gBAAe;MAC9B,oBAAkB,YAAA,QAAc,IAAI;MACpC,UAAK,WAAE,UAAU,EAAA;;;IAItB,mBAuBM,OAvBN,YAuBM,CAtBJ,YAqBkB,iBAAA;KApBf,oBAAkB,aAAA;KAClB,sBAAoB,aAAA;KACpB,kBAAgB,aAAA;KAChB,oBAAkB,aAAA;KAClB,sBAAoB,aAAA;KACpB,kBAAgB,aAAA;KACF;KACD;KACA;KACN;;4BAIsB,EAAA,UAAA,KAAA,EAF9B,mBAQE,UAAA,MAAA,WANqB,OAAA,QAAb,OAAO,MAAC;0CAFlB,YAQE,wBAPK,MAAK,EAAA;OAGT,KAAK;;OACN,KAAI;OACH,OAAK,eAAA,EAAA,QAAW,MAAM,WAAA,SAAc,gBAAA,UAAe,OAAA,CAAA;OACnD,OAAK,eAAE,MAAA,MAAK,CAAC,eAAW,EAAA,YAAA,QAAA,CAAA;iDAJjB,MAAM,WAAA,MAAU,CAAA,CAAA;;;;;;;;;;;IASd,MAAA,MAAK,CAAC,YAAA,WAAA,EAAtB,mBASW,UAAA,EAAA,KAAA,GAAA,EAAA,CART,mBAGS,UAAA;KAHD,OAAM;KAAwB,MAAK;KAAU,SAAO;kCAC1D,mBAA8D,QAAA;KAAxD,OAAM;KAA6B,eAAY;mBACrD,mBAAiE,QAAjE,YAAiE,gBAAhC,MAAA,MAAK,CAAC,iBAAgB,EAAA,EAAA,CAAA,CAAA,EAEzD,mBAGS,UAAA;KAHD,OAAM;KAAwB,MAAK;KAAU,SAAO;kCAC1D,mBAA8D,QAAA;KAAxD,OAAM;KAA6B,eAAY;mBACrD,mBAAiE,QAAjE,YAAiE,gBAAhC,MAAA,MAAK,CAAC,iBAAgB,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,GAAA,IAAA,mBAAA,IAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EEG/D,MAAM,QAAQ,YAlBC,SAkBmB,iBAAgB;EAClD,MAAM,QAAQ,UAAA;EAEd,MAAM,aAAa,cAAY,MAAM,IAAI,iBAAgB;EACzD,MAAM,aAAa,OAAO,sBAAsB,KAAI;EAEpD,MAAM,UAAU,eAAe,MAAM,QAAQ,CAAC,YAAY,MAAM,KAAK,CAAA;EACrE,MAAM,aAAa,eAAe,MAAM,WAAW,CAAC,YAAY,MAAM,QAAQ,CAAA;EAC9E,MAAM,aAAa,eAAe,QAAQ,SAAS,WAAW,SAAS,CAAC,YAAY,MAAM,QAAQ,CAAA;EAElG,MAAM,gBAAgB,gBAA+B,EACnD,YAAY,GACV,MAAM,cAAc,YAAY,WAAW,SAAS,qBACrD,4BACF,EAAC;EAEF,MAAM,yBAAyB,gBAAgB;GAC7C,UAAU,MAAM,qBAAqB,KAAA;IACpC,KAAK,MAAM,iBAAiB,UAAU,MAAM,qBAAqB,KAAA;GACnE,EAAC;AAEF,WAAa;GACX,WAAW,YAAY,MAAM,SAAS;GACtC,KAAK;GACN,CAAA;;uBAtFC,mBA+BM,OAAA;IA/BA,IAAI,MAAA,WAAU;IAAE,OAAM;IAAiB,OAAK,eAAE,cAAA,MAAA;OAClD,WAWO,KAAA,QAAA,OAAA,EAAA,QAAA,CAVL,YASE,cAAA;IARA,OAAM;IACL,KAAK,MAAA,MAAK,CAAC;IACX,QAAQ,MAAA,MAAK,CAAC;IACd,KAAK,MAAA,MAAK,CAAC;IACX,OAAO,MAAA,MAAK,CAAC,YAAY,MAAA,WAAU,EAAE,MAAM;IAC3C,QAAQ,MAAA,MAAK,CAAC,aAAa,MAAA,WAAU,EAAE,OAAO;IAC9C,OAAO,MAAA,MAAK,CAAC;IACb,eAAa,MAAA,MAAK,CAAC;;;;;;;;;SAKhB,WAAA,SAAA,WAAA,EAFR,YAiBY,wBAhBL,MAAA,MAAK,CAAC,WAAU,EAAA;;IAErB,OAAK,eAAA,CAAC,oBACE,uBAAA,MAAsB,CAAA;;2BAMlB;KAJ4B,WAAA,SAAA,WAAA,EAAxC,YAIY,wBAJI,MAAA,MAAK,CAAC,WAAU,EAAA,EAAA,KAAA,GAAA,EAAA;6BAGvB,CAFP,WAEO,KAAA,QAAA,WAAA,EAAA,QAAA,CADL,mBAAgC,QAAA,MAAA,gBAAvB,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;KAGW,QAAA,SAAA,WAAA,EAArC,YAIY,wBAJI,MAAA,MAAK,CAAC,QAAO,EAAA,EAAA,KAAA,GAAA,EAAA;6BAGpB,CAFP,WAEO,KAAA,QAAA,QAAA,EAAA,QAAA,CADL,mBAA6B,QAAA,MAAA,gBAApB,MAAA,MAAK,CAAC,KAAI,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;;;KAGvB,WAAQ,KAAA,QAAA,UAAA"}