runtimeBootstrapJs top-level constant
String
const runtimeBootstrapJs
Implementation
const String runtimeBootstrapJs = r'''
function bindGroupItemClicks() {
document.addEventListener('click', function(e) {
const item = findClosest(e.target, '[data-arcane-group][data-arcane-value]');
if (!item) return;
if (item.hasAttribute('data-arcane-action')) return;
if (item.tagName === 'INPUT') return;
const groupId = item.getAttribute('data-arcane-group');
const root = groupRoot(groupId);
if (!root || root === item) return;
const value = item.getAttribute('data-arcane-value');
const mode = root.getAttribute('data-arcane-group-mode') || 'single';
if (item.getAttribute('data-arcane-disabled') === 'true') return;
if (mode === 'multi') toggleGroupValue(groupId, value);
else setGroupValue(groupId, value);
if (root.getAttribute('data-arcane-group-close-surface') === 'true') {
const surf = withinSurface(item);
if (surf) closeSurface(surfaceType(surf), surfaceId(surf));
}
}, true);
}
function bindNativeInputs() {
document.addEventListener('change', function(e) {
const inp = e.target;
if (!inp || !inp.matches) return;
if (inp.matches('input[data-arcane-group][data-arcane-value]')) {
const groupId = inp.getAttribute('data-arcane-group');
const value = inp.getAttribute('data-arcane-value');
const mode = groupMode(groupId);
if (mode === 'multi') {
if (inp.checked) {
const cur = groupValues(groupId);
if (cur.indexOf(value) < 0) setGroupRawValues(groupId, cur.concat([value]));
} else {
const cur = groupValues(groupId);
const idx = cur.indexOf(value);
if (idx >= 0) {
const next = cur.slice();
next.splice(idx, 1);
setGroupRawValues(groupId, next);
}
}
} else if (inp.checked) {
setGroupValue(groupId, value);
}
}
if (inp.matches('select[data-arcane-group]')) {
const groupId = inp.getAttribute('data-arcane-group');
const mode = groupMode(groupId);
if (mode === 'multi') {
const values = [];
for (let i = 0; i < inp.options.length; i++) {
if (inp.options[i].selected) values.push(inp.options[i].value);
}
setGroupRawValues(groupId, values);
} else {
setGroupValue(groupId, inp.value);
}
}
}, true);
}
function bindOutsideTabs() {
document.addEventListener('click', function(e) {
const tab = findClosest(e.target, '[data-arcane-tab][data-arcane-tabs-group]');
if (!tab) return;
if (tab.hasAttribute('data-arcane-action')) return;
if (tab.getAttribute('data-arcane-disabled') === 'true') return;
const groupId = tab.getAttribute('data-arcane-tabs-group');
const tabId = tab.getAttribute('data-arcane-tab');
activateTab(groupId, tabId);
}, true);
}
function bindAccordions() {
document.addEventListener('click', function(e) {
const trigger = findClosest(e.target, '[data-arcane-panel-group][data-arcane-panel]');
if (!trigger) return;
if (trigger.hasAttribute('data-arcane-action')) return;
if (trigger.getAttribute('data-arcane-disabled') === 'true') return;
const groupId = trigger.getAttribute('data-arcane-panel-group');
const panelId = trigger.getAttribute('data-arcane-panel');
togglePanel(groupId, panelId);
}, true);
}
function bindCarousels() {
const carousels = document.querySelectorAll('[data-arcane-carousel][data-arcane-carousel-autoplay]');
for (let i = 0; i < carousels.length; i++) {
startCarouselAutoplay(carousels[i]);
}
}
function bindContextMenus() {
document.addEventListener('contextmenu', function(e) {
const trigger = findActionTarget(e.target, 'data-arcane-context-trigger');
if (!trigger) return;
e.preventDefault();
const targetId = trigger.getAttribute('data-arcane-context-trigger');
const surface = querySurface('context-menu', targetId);
if (!surface) return;
surface._arcaneContextX = e.clientX;
surface._arcaneContextY = e.clientY;
surface.style.position = 'fixed';
surface.style.top = e.clientY + 'px';
surface.style.left = e.clientX + 'px';
openSurface('context-menu', targetId, { trigger: trigger, skipAnchorListener: true });
}, true);
}
function hydrateInitialState() {
hydrateThemeFromStorage();
const surfaces = document.querySelectorAll('[data-arcane-surface][data-arcane-state="closed"]');
for (let i = 0; i < surfaces.length; i++) {
surfaces[i].setAttribute('hidden', '');
surfaces[i].setAttribute('aria-hidden', 'true');
}
const opens = document.querySelectorAll('[data-arcane-surface][data-arcane-state="open"]');
for (let i = 0; i < opens.length; i++) {
const el = opens[i];
el.removeAttribute('hidden');
el.setAttribute('aria-hidden', 'false');
ARCANE.stack.push({
type: el.getAttribute('data-arcane-surface'),
id: el.getAttribute('data-arcane-id'),
el: el
});
}
}
function arcaneInit() {
if (ARCANE._initialized) return;
ARCANE._initialized = true;
document.addEventListener('click', onDocumentClick, false);
document.addEventListener('change', onDocumentChange, false);
document.addEventListener('input', onDocumentInput, false);
document.addEventListener('submit', onDocumentSubmit, false);
document.addEventListener('dblclick', onDocumentDblClick, false);
document.addEventListener('contextmenu', onDocumentContextMenu, false);
document.addEventListener('keydown', onDocumentKeyDown, false);
document.addEventListener('pointerover', onPointerOver, false);
document.addEventListener('pointerout', onPointerOut, false);
document.addEventListener('focusin', onFocusIn, false);
document.addEventListener('focusout', onFocusOut, false);
bindGroupItemClicks();
bindNativeInputs();
bindOutsideTabs();
bindAccordions();
bindContextMenus();
bindCarousels();
bindSliders();
bindCommandKeyboard();
bindCalendars();
bindTimePickers();
hydrateInitialState();
fireEvent(document, 'arcane:ready', {});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', arcaneInit);
} else {
arcaneInit();
}
ARCANE.init = arcaneInit;
''';