10:function el(tag, attrs = {}, ...children) {
24:function esc(s) {
27:function debounce(fn, ms = 300) {
30:function fmtBytes(n) {
55:async function api(path, opts = {}) {
79:const GET = p => api(p);
80:const POST = (p, json) => api(p, { method: "POST", json });
86:function toast(msg, kind = "info", ms = 4200) {
99:function openModal(title, bodyNode, { buttons = [], wide = false, xw = false, onClose } = {}) {
117:function confirmDialog(message, { title = "Are you sure?", danger = true, confirmLabel = "Confirm", onConfirm } = {}) {
128:async function confirmedAction(message, fn, { title, confirmLabel = "Yes, proceed" } = {}) {
197:  if (window.pageBoot) window.pageBoot(me);
---NAV---
144:const NAV = [
174:  for (const item of NAV) {
