bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
90 lines (89 loc) • 4 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../../../chunk-CoQrYLCe.js");
const require_keys = require("../../../keys-durSVUrO.js");
const require_src_composables_orchestratorShared_index = require("../orchestratorShared/index.umd.js");
const require_floatingUi = require("../../../floatingUi-Cs4rDXmO.js");
const require_BTooltip = require("../../../BTooltip-CryTO-SM.js");
require("../../components/index.umd.js");
let vue = require("vue");
//#region src/composables/usePopover/index.ts
var usePopover = () => {
const orchestratorRegistry = (0, vue.inject)(require_keys.orchestratorRegistryKey, null);
if (!orchestratorRegistry) throw new Error("usePopover() must be called within setup(), and BApp, useRegistry or plugin must be installed/provided.");
const { store, _isOrchestratorInstalled } = orchestratorRegistry;
/**
* Create a popover or tooltip
* @param obj The popover or tooltip props
* @param tooltip If true, create a tooltip, otherwise create a popover
* @returns {PromiseWithComponent<typeof BPopover | typeof BTooltip, PopoverOrchestratorParam>} A promise object with methods to control the popover (show, hide, toggle, get, set, destroy)
*/
const create = (obj, tooltip, options = { keep: true }) => {
if (!_isOrchestratorInstalled.value) throw new Error("The BApp component must be mounted to use the popover controller");
const resolvedProps = (0, vue.isRef)(obj) ? obj : (0, vue.shallowRef)(obj);
const _self = resolvedProps.value?.id || Symbol("Popover controller");
const promise = require_src_composables_orchestratorShared_index.buildPromise(_self, store);
promise.stop = (0, vue.watch)(resolvedProps, (_newValue) => {
const newValue = { ...(0, vue.toValue)(_newValue) };
const previousIndex = store.value.findIndex((el) => el._self === _self);
const previous = previousIndex === -1 ? { _component: tooltip ? (0, vue.markRaw)(require_BTooltip.BTooltip_default) : (0, vue.markRaw)(require_floatingUi.BPopover_default) } : store.value[previousIndex];
const v = tooltip ? {
...previous,
type: "tooltip",
_self,
position: "popover",
promise,
options
} : {
...previous,
type: "popover",
_self,
position: "popover",
promise,
options
};
for (const key in newValue) if (key.startsWith("on")) v[key] = newValue[key];
else if (key === "component" && newValue.component) v._component = (0, vue.markRaw)(newValue.component);
else if (key === "slots" && newValue.slots) v.slots = (0, vue.markRaw)(newValue.slots);
else v[key] = (0, vue.toValue)(newValue[key]);
v.modelValue = v.modelValue ?? false;
v["onUpdate:modelValue"] = (val) => {
newValue["onUpdate:modelValue"]?.(val);
const { modelValue } = (0, vue.toValue)(obj);
if ((0, vue.isRef)(obj) && !(0, vue.isRef)(modelValue)) obj.value.modelValue = val;
if ((0, vue.isRef)(modelValue) && !(0, vue.isReadonly)(modelValue)) modelValue.value = val;
if (v.modelValue !== val) {
const popover = store.value.find((el) => el._self === _self);
if (popover) popover.modelValue = val;
}
};
if (previousIndex === -1) store.value.push(v);
else store.value.splice(previousIndex, 1, v);
}, {
immediate: true,
deep: true
});
(0, vue.onScopeDispose)(() => {
const popover = store.value.find((el) => el._self === _self);
if (popover) popover.promise.value.destroy?.();
}, true);
return promise.value;
};
const tooltip = (obj, options = { keep: true }) => create(obj, true, options);
const popover = (obj, options = { keep: true }) => create(obj, false, options);
return {
_isOrchestratorInstalled,
create,
popover,
tooltip,
store
};
};
/**
* @deprecated use usePopover() instead.
* @returns {ReturnType<typeof usePopover>} The popover controller
*/
var usePopoverController = usePopover;
//#endregion
exports.usePopover = usePopover;
exports.usePopoverController = usePopoverController;
//# sourceMappingURL=index.umd.js.map