bootstrap-vue-next 0.45.7 → 0.45.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BOffcanvas-DTRiZzwN.js → BOffcanvas-C7HenFW0.js} +5 -5
- package/dist/BOffcanvas-C7HenFW0.js.map +1 -0
- package/dist/{BOffcanvas-CQb9XNvS.mjs → BOffcanvas-CF-dWeez.mjs} +5 -5
- package/dist/BOffcanvas-CF-dWeez.mjs.map +1 -0
- package/dist/bootstrap-vue-next.mjs +1 -1
- package/dist/bootstrap-vue-next.umd.js +1 -1
- package/dist/src/components/BOffcanvas/index.mjs +1 -1
- package/dist/src/components/BOffcanvas/index.umd.js +1 -1
- package/dist/src/components/index.mjs +1 -1
- package/dist/src/components/index.umd.js +1 -1
- package/package.json +1 -1
- package/dist/BOffcanvas-CQb9XNvS.mjs.map +0 -1
- package/dist/BOffcanvas-DTRiZzwN.js.map +0 -1
|
@@ -160,11 +160,11 @@ var BOffcanvas_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
160
160
|
enterFromClass: "",
|
|
161
161
|
leaveFromClass: ""
|
|
162
162
|
} });
|
|
163
|
-
const
|
|
163
|
+
const smallerThanBreakpoint = require_dist.useBreakpoints(require_dist.breakpointsBootstrapV5).smaller(() => props.responsive ?? "xs");
|
|
164
164
|
const isOpenByBreakpoint = (0, vue.ref)(false);
|
|
165
165
|
(0, vue.onMounted)(() => {
|
|
166
166
|
if (props.responsive !== void 0) {
|
|
167
|
-
isOpenByBreakpoint.value = !
|
|
167
|
+
isOpenByBreakpoint.value = !smallerThanBreakpoint.value;
|
|
168
168
|
emit("breakpoint", buildTriggerableEvent("breakpoint"), isOpenByBreakpoint.value);
|
|
169
169
|
}
|
|
170
170
|
});
|
|
@@ -213,7 +213,7 @@ var BOffcanvas_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
213
213
|
id: computedId.value,
|
|
214
214
|
active: trapActive.value
|
|
215
215
|
}));
|
|
216
|
-
(0, vue.watch)(
|
|
216
|
+
(0, vue.watch)(smallerThanBreakpoint, (newValue) => {
|
|
217
217
|
if (props.responsive === void 0) return;
|
|
218
218
|
if (newValue === true) {
|
|
219
219
|
const opened = false;
|
|
@@ -238,7 +238,7 @@ var BOffcanvas_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
238
238
|
isOpenByBreakpoint.value = false;
|
|
239
239
|
return;
|
|
240
240
|
}
|
|
241
|
-
const opened = !
|
|
241
|
+
const opened = !smallerThanBreakpoint.value;
|
|
242
242
|
if (opened === isOpenByBreakpoint.value) return;
|
|
243
243
|
setLocalNoAnimation(true);
|
|
244
244
|
requestAnimationFrame(() => {
|
|
@@ -328,4 +328,4 @@ Object.defineProperty(exports, "BOffcanvas_default", {
|
|
|
328
328
|
}
|
|
329
329
|
});
|
|
330
330
|
|
|
331
|
-
//# sourceMappingURL=BOffcanvas-
|
|
331
|
+
//# sourceMappingURL=BOffcanvas-C7HenFW0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BOffcanvas-C7HenFW0.js","names":["$attrs"],"sources":["../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BOffcanvas/BOffcanvas.vue"],"sourcesContent":["<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerThanBreakpoint = breakpoints.smaller(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerThanBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerThanBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerThanBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n","<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerThanBreakpoint = breakpoints.smaller(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerThanBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerThanBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerThanBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -159,11 +159,11 @@ var BOffcanvas_default = /* @__PURE__ */ defineComponent({
|
|
|
159
159
|
enterFromClass: "",
|
|
160
160
|
leaveFromClass: ""
|
|
161
161
|
} });
|
|
162
|
-
const
|
|
162
|
+
const smallerThanBreakpoint = useBreakpoints(breakpointsBootstrapV5).smaller(() => props.responsive ?? "xs");
|
|
163
163
|
const isOpenByBreakpoint = ref(false);
|
|
164
164
|
onMounted(() => {
|
|
165
165
|
if (props.responsive !== void 0) {
|
|
166
|
-
isOpenByBreakpoint.value = !
|
|
166
|
+
isOpenByBreakpoint.value = !smallerThanBreakpoint.value;
|
|
167
167
|
emit("breakpoint", buildTriggerableEvent("breakpoint"), isOpenByBreakpoint.value);
|
|
168
168
|
}
|
|
169
169
|
});
|
|
@@ -212,7 +212,7 @@ var BOffcanvas_default = /* @__PURE__ */ defineComponent({
|
|
|
212
212
|
id: computedId.value,
|
|
213
213
|
active: trapActive.value
|
|
214
214
|
}));
|
|
215
|
-
watch(
|
|
215
|
+
watch(smallerThanBreakpoint, (newValue) => {
|
|
216
216
|
if (props.responsive === void 0) return;
|
|
217
217
|
if (newValue === true) {
|
|
218
218
|
const opened = false;
|
|
@@ -237,7 +237,7 @@ var BOffcanvas_default = /* @__PURE__ */ defineComponent({
|
|
|
237
237
|
isOpenByBreakpoint.value = false;
|
|
238
238
|
return;
|
|
239
239
|
}
|
|
240
|
-
const opened = !
|
|
240
|
+
const opened = !smallerThanBreakpoint.value;
|
|
241
241
|
if (opened === isOpenByBreakpoint.value) return;
|
|
242
242
|
setLocalNoAnimation(true);
|
|
243
243
|
requestAnimationFrame(() => {
|
|
@@ -322,4 +322,4 @@ var BOffcanvas_default = /* @__PURE__ */ defineComponent({
|
|
|
322
322
|
//#endregion
|
|
323
323
|
export { BOffcanvas_default as t };
|
|
324
324
|
|
|
325
|
-
//# sourceMappingURL=BOffcanvas-
|
|
325
|
+
//# sourceMappingURL=BOffcanvas-CF-dWeez.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BOffcanvas-CF-dWeez.mjs","names":["$attrs"],"sources":["../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BOffcanvas/BOffcanvas.vue"],"sourcesContent":["<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerThanBreakpoint = breakpoints.smaller(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerThanBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerThanBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerThanBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n","<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerThanBreakpoint = breakpoints.smaller(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerThanBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerThanBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerThanBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ import { n as BListGroup_default, t as BListGroupItem_default } from "./BListGro
|
|
|
56
56
|
import { useScrollLock } from "./src/composables/useScrollLock/index.mjs";
|
|
57
57
|
import { a as BNav_default, i as BNavForm_default, n as BNavItemDropdown_default, r as BNavItem_default, t as BNavText_default } from "./BNav-DfYvjfRK.mjs";
|
|
58
58
|
import { i as BNavbar_default, n as BNavbarNav_default, r as BNavbarBrand_default, t as BNavbarToggle_default } from "./BNavbar-xYaikQVY.mjs";
|
|
59
|
-
import { t as BOffcanvas_default } from "./BOffcanvas-
|
|
59
|
+
import { t as BOffcanvas_default } from "./BOffcanvas-CF-dWeez.mjs";
|
|
60
60
|
import { t as BOverlay_default } from "./BOverlay-Bh2PIN_q.mjs";
|
|
61
61
|
import { a as directiveNames, i as composablesWithExternalPath, n as componentsWithExternalPath, o as directivesWithExternalPath, r as composableNames, t as componentNames } from "./BootstrapVueOptions-Dt1TQdih.mjs";
|
|
62
62
|
import { t as types_exports } from "./src/types/index.mjs";
|
|
@@ -57,7 +57,7 @@ const require_BListGroup = require("./BListGroup-C8JOzHTz.js");
|
|
|
57
57
|
const require_src_composables_useScrollLock_index = require("./src/composables/useScrollLock/index.umd.js");
|
|
58
58
|
const require_BNav = require("./BNav-DCLambmM.js");
|
|
59
59
|
const require_BNavbar = require("./BNavbar-BLWaZJRP.js");
|
|
60
|
-
const require_BOffcanvas = require("./BOffcanvas-
|
|
60
|
+
const require_BOffcanvas = require("./BOffcanvas-C7HenFW0.js");
|
|
61
61
|
const require_BOverlay = require("./BOverlay-Bh4ldxgt.js");
|
|
62
62
|
const require_BootstrapVueOptions = require("./BootstrapVueOptions-DeViqxoD.js");
|
|
63
63
|
const require_src_types_index = require("./src/types/index.umd.js");
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as BOffcanvas_default } from "../../../BOffcanvas-
|
|
1
|
+
import { t as BOffcanvas_default } from "../../../BOffcanvas-CF-dWeez.mjs";
|
|
2
2
|
export { BOffcanvas_default as BOffcanvas };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_BOffcanvas = require("../../../BOffcanvas-
|
|
2
|
+
const require_BOffcanvas = require("../../../BOffcanvas-C7HenFW0.js");
|
|
3
3
|
exports.BOffcanvas = require_BOffcanvas.BOffcanvas_default;
|
|
@@ -54,7 +54,7 @@ import "./BLink/index.mjs";
|
|
|
54
54
|
import { n as BListGroup_default, t as BListGroupItem_default } from "../../BListGroup-DwTLpNiD.mjs";
|
|
55
55
|
import { a as BNav_default, i as BNavForm_default, n as BNavItemDropdown_default, r as BNavItem_default, t as BNavText_default } from "../../BNav-DfYvjfRK.mjs";
|
|
56
56
|
import { i as BNavbar_default, n as BNavbarNav_default, r as BNavbarBrand_default, t as BNavbarToggle_default } from "../../BNavbar-xYaikQVY.mjs";
|
|
57
|
-
import { t as BOffcanvas_default } from "../../BOffcanvas-
|
|
57
|
+
import { t as BOffcanvas_default } from "../../BOffcanvas-CF-dWeez.mjs";
|
|
58
58
|
import { t as BOverlay_default } from "../../BOverlay-Bh2PIN_q.mjs";
|
|
59
59
|
import { t as BPagination_default } from "../../BPagination-D75q-ZNg.mjs";
|
|
60
60
|
import { a as BPlaceholder_default, i as BPlaceholderButton_default, n as BPlaceholderTable_default, r as BPlaceholderCard_default, t as BPlaceholderWrapper_default } from "../../BPlaceholder-DPQ6mCLN.mjs";
|
|
@@ -55,7 +55,7 @@ require("./BLink/index.umd.js");
|
|
|
55
55
|
const require_BListGroup = require("../../BListGroup-C8JOzHTz.js");
|
|
56
56
|
const require_BNav = require("../../BNav-DCLambmM.js");
|
|
57
57
|
const require_BNavbar = require("../../BNavbar-BLWaZJRP.js");
|
|
58
|
-
const require_BOffcanvas = require("../../BOffcanvas-
|
|
58
|
+
const require_BOffcanvas = require("../../BOffcanvas-C7HenFW0.js");
|
|
59
59
|
const require_BOverlay = require("../../BOverlay-Bh4ldxgt.js");
|
|
60
60
|
const require_BPagination = require("../../BPagination-fbjFAtxu.js");
|
|
61
61
|
const require_BPlaceholder = require("../../BPlaceholder-B3rs_39w.js");
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "bootstrap-vue-next",
|
|
3
3
|
"displayName": "BootstrapVueNext",
|
|
4
4
|
"description": "Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development",
|
|
5
|
-
"version": "0.45.
|
|
5
|
+
"version": "0.45.8",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "./dist/bootstrap-vue-next.umd.js",
|
|
8
8
|
"module": "./dist/bootstrap-vue-next.mjs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BOffcanvas-CQb9XNvS.mjs","names":["$attrs"],"sources":["../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BOffcanvas/BOffcanvas.vue"],"sourcesContent":["<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerOrEqualToBreakpoint = breakpoints.smallerOrEqual(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerOrEqualToBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerOrEqualToBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerOrEqualToBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n","<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerOrEqualToBreakpoint = breakpoints.smallerOrEqual(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerOrEqualToBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerOrEqualToBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerOrEqualToBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BOffcanvas-DTRiZzwN.js","names":["$attrs"],"sources":["../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BOffcanvas/BOffcanvas.vue"],"sourcesContent":["<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerOrEqualToBreakpoint = breakpoints.smallerOrEqual(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerOrEqualToBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerOrEqualToBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerOrEqualToBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n","<template>\n <ConditionalTeleport\n :to=\"props.teleportTo\"\n :disabled=\"props.teleportDisabled || isOpenByBreakpoint\"\n >\n <Transition\n v-if=\"renderRef || contentShowing || isOpenByBreakpoint\"\n v-bind=\"transitionProps\"\n :appear=\"modelValue || props.visible\"\n >\n <div\n v-show=\"\n (showRef && ((backdropReady && props.backdropFirst) || !props.backdropFirst)) ||\n isOpenByBreakpoint\n \"\n :id=\"computedId\"\n ref=\"_element\"\n aria-modal=\"true\"\n role=\"dialog\"\n :class=\"computedClasses\"\n :style=\"computedStyles\"\n tabindex=\"-1\"\n :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n data-bs-backdrop=\"false\"\n v-bind=\"$attrs\"\n >\n <template v-if=\"contentShowing || isOpenByBreakpoint\">\n <div\n v-if=\"!props.noHeader\"\n class=\"offcanvas-header\"\n :class=\"props.headerClass\"\n v-bind=\"props.headerAttrs\"\n >\n <slot name=\"header\" v-bind=\"sharedSlots\">\n <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n <slot name=\"title\" v-bind=\"sharedSlots\">\n {{ props.title }}\n </slot>\n </h5>\n <template v-if=\"!props.noHeaderClose\">\n <BButton\n v-if=\"hasHeaderCloseSlot\"\n ref=\"_close\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n >\n <slot name=\"header-close\" v-bind=\"sharedSlots\" />\n </BButton>\n <BCloseButton\n v-else\n ref=\"_close\"\n :aria-label=\"props.headerCloseLabel\"\n v-bind=\"headerCloseAttrs\"\n @click=\"hide('close')\"\n />\n </template>\n </slot>\n </div>\n <div class=\"offcanvas-body\" :class=\"props.bodyClass\" v-bind=\"props.bodyAttrs\">\n <slot v-bind=\"sharedSlots\" />\n </div>\n <div v-if=\"hasFooterSlot\" :class=\"props.footerClass\">\n <slot name=\"footer\" v-bind=\"sharedSlots\" />\n </div>\n </template>\n <div\n v-if=\"needsFallback\"\n ref=\"_fallbackFocusElement\"\n :class=\"fallbackClassSelector\"\n tabindex=\"0\"\n style=\"width: 0; height: 0; overflow: hidden\"\n />\n </div>\n </Transition>\n <slot v-if=\"!props.noBackdrop\" name=\"backdrop\" v-bind=\"sharedSlots\">\n <Transition v-if=\"renderBackdropRef\" v-bind=\"backdropTransitionProps\">\n <div\n v-show=\"showBackdrop\"\n class=\"offcanvas-backdrop\"\n :class=\"{\n fade: !computedNoAnimation,\n show: backdropVisible || computedNoAnimation,\n }\"\n @click=\"hide('backdrop')\"\n />\n </Transition>\n </slot>\n </ConditionalTeleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {breakpointsBootstrapV5, onKeyStroke, unrefElement, useBreakpoints} from '@vueuse/core'\nimport {useActivatedFocusTrap} from '../../composables/useActivatedFocusTrap'\nimport {computed, type EmitFn, nextTick, onMounted, ref, useTemplateRef, watch} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport type {\n BOffcanvasEmits,\n BOffcanvasProps,\n BOffcanvasSlots,\n BOffcanvasSlotsData,\n} from '../../types'\nimport BButton from '../BButton/BButton.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport ConditionalTeleport from '../ConditionalTeleport.vue'\nimport {useSafeScrollLock} from '../../composables/useSafeScrollLock'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useShowHide} from '../../composables/useShowHide'\nimport {getElement} from '../../utils/getElement'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n inheritAttrs: false,\n})\n\nconst _props = withDefaults(defineProps<Omit<BOffcanvasProps, 'modelValue'>>(), {\n backdropFirst: false,\n bodyAttrs: undefined,\n bodyClass: undefined,\n bodyScrolling: false,\n focus: undefined,\n footerClass: undefined,\n headerAttrs: undefined,\n headerClass: undefined,\n headerCloseClass: undefined,\n headerCloseLabel: 'Close',\n headerCloseVariant: 'secondary',\n id: undefined,\n initialAnimation: false,\n lazy: false,\n noAnimation: false,\n noBackdrop: false,\n noCloseOnBackdrop: false,\n noCloseOnEsc: false,\n noTrap: false,\n noHeader: false,\n noHeaderClose: false,\n unmountLazy: false,\n placement: 'start',\n shadow: false,\n teleportDisabled: false,\n teleportTo: 'body',\n title: undefined,\n show: false,\n width: undefined,\n visible: false,\n})\nconst props = useDefaults(_props, 'BOffcanvas')\nconst emit = defineEmits<BOffcanvasEmits>()\nconst slots = defineSlots<BOffcanvasSlots>()\n\nconst modelValue = defineModel<Exclude<BOffcanvasProps['modelValue'], undefined>>({\n default: false,\n})\n\nconst computedId = useId(() => props.id, 'offcanvas')\n\nconst element = useTemplateRef<HTMLElement | null>('_element')\nconst fallbackFocusElement = useTemplateRef<HTMLElement | null>('_fallbackFocusElement')\nconst closeButton = useTemplateRef<HTMLElement | null>('_close')\n\nconst pickFocusItem = () => {\n if (props.focus && typeof props.focus !== 'boolean') {\n if (props.focus === 'close') {\n return closeButton\n }\n return getElement(props.focus, element.value ?? undefined)\n }\n return element\n}\n\nconst onAfterEnter = () => {\n nextTick(() => {\n if (props.focus !== false && !isOpenByBreakpoint.value && props.noTrap) {\n const focusElement = unrefElement(pickFocusItem())\n focusElement?.focus()\n }\n })\n}\n\nconst {\n showRef,\n renderRef,\n renderBackdropRef,\n hide,\n show,\n toggle,\n computedNoAnimation,\n contentShowing,\n transitionProps,\n backdropReady,\n backdropTransitionProps,\n backdropVisible,\n isVisible,\n buildTriggerableEvent,\n isLeaving,\n trapActive,\n setLocalNoAnimation,\n} = useShowHide(modelValue, props, emit as EmitFn, element, computedId, {\n transitionProps: {\n onAfterEnter,\n enterToClass: 'showing',\n leaveToClass: 'hiding',\n enterActiveClass: '',\n leaveActiveClass: '',\n enterFromClass: '',\n leaveFromClass: '',\n },\n})\n\nconst breakpoints = useBreakpoints(breakpointsBootstrapV5)\nconst smallerOrEqualToBreakpoint = breakpoints.smallerOrEqual(() => props.responsive ?? 'xs')\n// Initialize with SSR-safe default value to prevent hydration mismatches\n// The actual breakpoint evaluation is deferred to onMounted (client-side only)\nconst isOpenByBreakpoint = ref(false)\n\nonMounted(() => {\n if (props.responsive !== undefined) {\n // Update the breakpoint state after mounting (client-side only)\n isOpenByBreakpoint.value = !smallerOrEqualToBreakpoint.value\n emit('breakpoint', buildTriggerableEvent('breakpoint'), isOpenByBreakpoint.value)\n }\n})\n\nuseSafeScrollLock(showRef, () => props.bodyScrolling || isOpenByBreakpoint.value)\n\nonKeyStroke(\n 'Escape',\n () => {\n hide('esc')\n },\n {target: element, passive: true}\n)\n\nconst fallbackClassSelector = 'offcanvas-fallback-focus'\n\nconst {needsFallback} = useActivatedFocusTrap({\n element,\n isActive: trapActive,\n noTrap: () => props.noTrap || isOpenByBreakpoint.value,\n fallbackFocus: {\n classSelector: fallbackClassSelector,\n ref: fallbackFocusElement,\n },\n focus: () =>\n props.focus === false || isOpenByBreakpoint.value\n ? false\n : (unrefElement(pickFocusItem()) ?? undefined),\n})\n\nconst showBackdrop = computed(\n () =>\n (props.responsive === undefined || !isOpenByBreakpoint.value) &&\n !props.noBackdrop &&\n (showRef.value === true ||\n (isLeaving.value && props.backdropFirst && !computedNoAnimation.value))\n)\n\nconst hasHeaderCloseSlot = computed(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n {'text-reset': !hasHeaderCloseSlot.value},\n props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = computed(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n `offcanvas-${props.placement}`,\n {\n 'show': isVisible.value,\n 'hiding': isLeaving.value && !isVisible.value,\n [`shadow-${props.shadow}`]: !!props.shadow,\n 'no-transition': computedNoAnimation.value,\n },\n])\n\nconst computedStyles = computed(() => ({\n width: props.width,\n}))\n\nconst sharedSlots = computed<BOffcanvasSlotsData>(() => ({\n visible: isVisible.value,\n placement: props.placement,\n hide,\n show,\n toggle,\n id: computedId.value,\n active: trapActive.value,\n}))\n\nwatch(smallerOrEqualToBreakpoint, (newValue) => {\n if (props.responsive === undefined) return\n if (newValue === true) {\n const opened = false\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('hide', buildTriggerableEvent('hide'))\n } else {\n const opened = true\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n emit('show', buildTriggerableEvent('show'))\n }\n})\n\nwatch(\n () => props.responsive,\n (newValue) => {\n if (newValue === undefined) {\n isOpenByBreakpoint.value = false\n return\n }\n const opened = !smallerOrEqualToBreakpoint.value\n if (opened === isOpenByBreakpoint.value) return\n setLocalNoAnimation(true)\n requestAnimationFrame(() => {\n isOpenByBreakpoint.value = opened\n })\n emit('breakpoint', buildTriggerableEvent('breakpoint'), opened)\n if (opened) {\n emit('show', buildTriggerableEvent('show'))\n } else {\n emit('hide', buildTriggerableEvent('hide'))\n }\n }\n)\n\ndefineExpose({\n hide,\n show,\n toggle,\n isOpenByBreakpoint,\n})\n</script>\n"],"mappings":"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"}
|