axonyx-ui 0.0.43

Foundry CSS, JavaScript helpers, and Axonyx-native .ax components for Axonyx UI.
Documentation
(() => {
  function openDialog(id) {
    const dialog = document.getElementById(id);
    if (!dialog) return;
    dialog.dataset.open = 'true';
    dialog.removeAttribute('hidden');
    document.documentElement.dataset.dialogOpen = 'true';

    const closeButton = dialog.querySelector('[data-ax-dialog-close]');
    if (closeButton && closeButton.focus) closeButton.focus();
  }

  function closeDialog(dialog) {
    if (!dialog) return;
    dialog.dataset.open = 'false';
    dialog.setAttribute('hidden', '');
    delete document.documentElement.dataset.dialogOpen;
  }

  function boot() {
    document.querySelectorAll('.ax-dialog').forEach((dialog) => {
      if (dialog.dataset.open !== 'true') {
        dialog.setAttribute('hidden', '');
      }

      dialog.querySelectorAll('[data-ax-dialog-close]').forEach((trigger) => {
        trigger.addEventListener('click', () => closeDialog(dialog));
      });
    });

    document.querySelectorAll('[data-ax-dialog-open]').forEach((trigger) => {
      trigger.addEventListener('click', () => {
        const id = trigger.getAttribute('data-ax-dialog-open');
        if (id) openDialog(id);
      });
    });

    document.addEventListener('keydown', (event) => {
      if (event.key !== 'Escape') return;
      const open = document.querySelector('.ax-dialog[data-open="true"]');
      if (open) closeDialog(open);
    });
  }

  window.AxonyxDialog = { open: openDialog };

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', boot);
  } else {
    boot();
  }
})();