bootstrap-vue-next
Version:
BootstrapVueNext is an early and lovely component library for Vue 3 & Nuxt 3 based on Bootstrap 5 and Typescript.
101 lines (100 loc) • 3.11 kB
JavaScript
import { ref, toRef, watch, markRaw } from "vue";
import { p as popoverPluginKey } from "../../../keys-CFfh7DXf.mjs";
const popoverPlugin = {
install(app) {
const popovers = ref(/* @__PURE__ */ new Map());
const popover = (obj) => {
var _a;
const resolvedProps = toRef(obj.props);
const reference = toRef(obj.target);
const _self = ((_a = resolvedProps.value) == null ? void 0 : _a.id) || Symbol("Popover controller");
watch(
reference,
(newValue) => {
if (!newValue) {
popovers.value.delete(_self);
} else {
popovers.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...resolvedProps.value, _target: newValue, _modelValue: false }
});
}
},
{ immediate: true }
);
watch(resolvedProps, (newValue) => {
const previous = popovers.value.get(_self);
if (!previous) return;
popovers.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...previous.props, ...newValue }
});
});
return _self;
};
const setPopover = (self, val) => {
const popover2 = popovers.value.get(self);
if (!(popover2 == null ? void 0 : popover2.props)) return;
popover2.props = {
...popover2.props,
...val
};
};
const removePopover = (self) => popovers.value.delete(self);
const tooltips = ref(/* @__PURE__ */ new Map());
const tooltip = (obj) => {
var _a;
const resolvedProps = toRef(obj.props);
const reference = toRef(obj.target);
const _self = ((_a = resolvedProps.value) == null ? void 0 : _a.id) || Symbol("Tooltip controller");
watch(
reference,
(newValue) => {
if (!newValue) {
tooltips.value.delete(_self);
} else {
tooltips.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...resolvedProps.value, _modelValue: false, _target: newValue }
});
}
},
{
immediate: true
}
);
watch(resolvedProps, (newValue) => {
const previous = tooltips.value.get(_self);
if (!previous) return;
tooltips.value.set(_self, {
component: !obj.component ? void 0 : markRaw(obj.component),
props: { ...previous.props, ...newValue }
});
});
return _self;
};
const setTooltip = (self, val) => {
const tip = tooltips.value.get(self);
if (!(tip == null ? void 0 : tip.props)) return;
tip.props = {
...tip.props,
...val
};
};
const removeTooltip = (self) => tooltips.value.delete(self);
app.provide(popoverPluginKey, {
popovers,
tooltips,
tooltip,
popover,
setPopover,
setTooltip,
removePopover,
removeTooltip
});
}
};
export {
popoverPlugin
};
//# sourceMappingURL=index.mjs.map