bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
77 lines (76 loc) • 3.1 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_keys = require("../../../keys-durSVUrO.js");
const require_constants = require("../../../constants-hccBP09R.js");
const require_registryAccess = require("../../../registryAccess-D-YxwQJq.js");
const require_utils = require("../../../utils-CaC78Zdk.js");
require("vue");
//#region src/directives/BToggle/index.ts
var getTargets = (binding, el) => {
const { modifiers, arg, value } = binding;
const targets = Object.keys(modifiers || {});
const localValue = typeof value === "string" ? value.split(require_constants.RX_SPACE_SPLIT) : value;
if (el.tagName.toLowerCase() === "a") {
const href = el.getAttribute("href") || "";
if (require_constants.RX_HASH_ID.test(href)) targets.push(href.replace(require_constants.RX_HASH, ""));
}
Array.prototype.concat.apply([], [arg, localValue]).forEach((t) => typeof t === "string" && targets.push(t));
return targets.filter((t, index, arr) => t && arr.indexOf(t) === index);
};
var handleUpdate = (el, binding, vnode) => {
const targets = getTargets(binding, el);
if (targets.length === 0) return;
const showHideMap = require_utils.findProvides(binding, vnode)[require_keys.showHideRegistryKey]?.values ?? null;
if (el.dataset.bvtoggle) {
const oldTargets = (el.dataset.bvtoggle || "").split(" ");
if (oldTargets.length === 0) return;
for (const targetId of oldTargets) {
const showHide = require_registryAccess.getActiveShowHide(showHideMap, targetId);
if (!showHide) continue;
if (!targets.includes(targetId)) showHide.unregisterTrigger("click", el, false);
}
}
el.dataset.bvtoggle = targets.join(" ");
targets.forEach(async (targetId) => {
let count = 0;
const maxAttempts = 5;
const delayMs = 100;
while (count < maxAttempts) {
if (!el.dataset.bvtoggle) return;
const showHide = require_registryAccess.getActiveShowHide(showHideMap, targetId);
if (!showHide) {
count++;
if (count < maxAttempts) {
await new Promise((resolve) => setTimeout(resolve, delayMs));
continue;
}
if (el.dataset.bvtoggle) console.warn(`[v-b-toggle] Target with ID ${targetId} not found after ${maxAttempts * delayMs}ms`);
break;
}
if (!el.dataset.bvtoggle) return;
showHide.unregisterTrigger("click", el, false);
showHide.registerTrigger("click", el);
break;
}
});
el.setAttribute("aria-controls", targets.join(" "));
};
var handleUnmount = (el, binding, vnode) => {
const targets = getTargets(binding, el);
if (targets.length === 0) return;
const showHideMap = require_utils.findProvides(binding, vnode)[require_keys.showHideRegistryKey]?.values ?? null;
targets.forEach((targetId) => {
const showHide = require_registryAccess.getActiveShowHide(showHideMap, targetId);
if (!showHide) return;
showHide.unregisterTrigger("click", el, true);
});
el.removeAttribute("aria-controls");
delete el.dataset.bvtoggle;
};
var vBToggle = {
mounted: handleUpdate,
updated: handleUpdate,
unmounted: handleUnmount
};
//#endregion
exports.vBToggle = vBToggle;
//# sourceMappingURL=index.umd.js.map