bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
183 lines (182 loc) • 7.18 kB
JavaScript
import { _ as orchestratorRegistryKey } from "./keys-BgLwJbLV.js";
import { useOrchestratorRegistry } from "./src/composables/orchestratorShared/index.mjs";
import { n as warn } from "./console-DaUCJgpk.js";
import { t as ConditionalTeleport_default } from "./ConditionalTeleport-BCKPLEun.js";
import { useProvideDefaults } from "./src/composables/useProvideDefaults/index.mjs";
import { useRegistry } from "./src/composables/useRegistry/index.mjs";
import { Fragment, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createVNode, defineComponent, guardReactiveProps, inject, mergeProps, normalizeClass, normalizeProps, normalizeStyle, openBlock, renderList, renderSlot, resolveDynamicComponent, toRef, watch, withCtx } from "vue";
//#region src/utils/positionClasses.ts
var positionClasses = {
"top-start": "top-0 start-0",
"top-center": "top-0 start-50 translate-middle-x",
"top-end": "top-0 end-0",
"middle-start": "top-50 start-0 translate-middle-y",
"middle-center": "top-50 start-50 translate-middle",
"middle-end": "top-50 end-0 translate-middle-y",
"bottom-start": "bottom-0 start-0",
"bottom-center": "bottom-0 start-50 translate-middle-x",
"bottom-end": "bottom-0 end-0"
};
//#endregion
//#region src/components/BApp/BOrchestrator.vue
var BOrchestrator_default = /* @__PURE__ */ defineComponent({
__name: "BOrchestrator",
props: {
noPopovers: {
type: Boolean,
default: false
},
noToasts: {
type: Boolean,
default: false
},
noModals: {
type: Boolean,
default: false
},
appendToast: {
type: Boolean,
default: false
},
teleportTo: {},
filter: {
type: Function,
default: void 0
}
},
setup(__props) {
const setEventOk = (event) => {
event.ok = event.trigger === "ok" ? true : event.trigger === "cancel" ? false : null;
};
const props = __props;
const orchestratorRegistry = inject(orchestratorRegistryKey, null);
if (orchestratorRegistry) {
if (!orchestratorRegistry._isOrchestratorInstalled.value) orchestratorRegistry._setOrchestratorInstalled(true);
} else warn("BOrchestrator", "The orchestrator registry not found. Please use BApp, useRegistry or provide the plugin.");
watch(() => props.appendToast, (value) => {
orchestratorRegistry?._setToastAppend(value);
}, { immediate: true });
const items = computed(() => {
const store = orchestratorRegistry?.store.value;
let filteredStore = {
tooltip: !props.noPopovers && store?.tooltip ? [...store.tooltip.values()].map((e) => e.value) : [],
modal: !props.noModals && store?.modal ? [...store.modal.values()].map((e) => e.value) : [],
popover: !props.noPopovers && store?.popover ? [...store.popover.values()].map((e) => e.value) : [],
toast: !props.noToasts && store?.toast ? [...store.toast.values()].map((e) => e.value) : []
};
if (props.filter) filteredStore = {
tooltip: filteredStore.tooltip.filter(props.filter),
modal: filteredStore.modal.filter(props.filter),
popover: filteredStore.popover.filter(props.filter),
toast: filteredStore.toast.filter(props.filter)
};
return filteredStore;
});
const positionedItems = computed(() => {
const toastDefaultPosition = "bottom-start";
const toastDefaults = (cls) => ({
class: `${positionClasses[cls]} toast-container position-fixed p-3`,
style: "width: calc(var(--bs-toast-max-width, 350px) + var(--bs-toast-padding-x, 1rem) * 2)",
transitionGroupName: "b-list"
});
const allGroups = {
...items.value.toast.reduce((acc, item) => {
const pos = item.props.position ?? toastDefaultPosition;
(acc[pos] ??= {
...toastDefaults(pos),
items: []
}).items.push(item);
return acc;
}, {}),
modal: { items: items.value.modal },
popover: { items: items.value.popover },
tooltip: { items: items.value.tooltip }
};
return Object.fromEntries(Object.entries(allGroups).filter(([, value]) => value.items.length > 0));
});
return (_ctx, _cache) => {
return openBlock(), createBlock(ConditionalTeleport_default, {
to: __props.teleportTo,
disabled: !__props.teleportTo
}, {
default: withCtx(() => [createElementVNode("div", mergeProps({ class: "orchestrator-container" }, _ctx.$attrs), [(openBlock(true), createElementBlock(Fragment, null, renderList(positionedItems.value, (value, key) => {
return openBlock(), createElementBlock("div", {
key,
class: normalizeClass(value.class),
style: normalizeStyle(value.style)
}, [createVNode(TransitionGroup, { name: value.transitionGroupName }, {
default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(value.items, ({ component, fns: { setRef, resolve: resolvePromise }, props: componentProps, id, slots, options }) => {
return openBlock(), createElementBlock("span", { key: id }, [(openBlock(), createBlock(resolveDynamicComponent(component), mergeProps({ ref_for: true }, componentProps, {
ref_for: true,
ref: setRef,
"initial-animation": "",
"teleport-disabled": true,
onHide: (e) => {
setEventOk(e);
componentProps.onHide?.(e);
if (e.defaultPrevented) return;
if (options?.resolveOnHide) resolvePromise(e);
},
onHidden: (e) => {
setEventOk(e);
componentProps.onHidden?.(e);
if (e.defaultPrevented) return;
if (!options?.resolveOnHide) resolvePromise(e);
}
}), createSlots({ _: 2 }, [renderList(slots, (comp, slot) => {
return {
name: slot,
fn: withCtx((scope) => [(openBlock(), createBlock(resolveDynamicComponent(comp), mergeProps({ ref_for: true }, scope), null, 16))])
};
})]), 1040, ["onHide", "onHidden"]))]);
}), 128))]),
_: 2
}, 1032, ["name"])], 6);
}), 128))], 16)]),
_: 1
}, 8, ["to", "disabled"]);
};
}
});
//#endregion
//#region src/components/BApp/BApp.vue
var BApp_default = /* @__PURE__ */ defineComponent({
inheritAttrs: false,
__name: "BApp",
props: {
defaults: { default: void 0 },
mergeDefaults: {
type: [Boolean, Function],
default: false
},
teleportTo: { default: void 0 },
noOrchestrator: {
type: Boolean,
default: false
},
appendToast: {
type: Boolean,
default: false
},
rtl: {
type: [Boolean, Object],
default: false
}
},
setup(__props) {
const props = __props;
useProvideDefaults(toRef(() => props.defaults), props.mergeDefaults);
useRegistry(props.rtl);
if (!props.noOrchestrator) useOrchestratorRegistry();
return (_ctx, _cache) => {
return openBlock(), createElementBlock(Fragment, null, [!__props.noOrchestrator ? (openBlock(), createBlock(BOrchestrator_default, {
key: 0,
"append-toast": __props.appendToast,
"teleport-to": __props.teleportTo
}, null, 8, ["append-toast", "teleport-to"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(_ctx.$attrs)))], 64);
};
}
});
//#endregion
export { BOrchestrator_default as n, BApp_default as t };
//# sourceMappingURL=BApp-Bg5xEz8H.js.map