mobux 0.46.0

A touch-friendly tmux web UI for unhinged people who run terminal sessions from their phone while walking the dog
import { u } from "../lib/base.js";

const KINDS = [
  { key: "files", mount: "/files/", label: "files" },
  { key: "proxies", mount: "/proxy/", label: "proxy" },
];

export function pageCount(info) {
  return {
    files: info?.files?.length ?? 0,
    proxies: info?.proxies?.length ?? 0,
  };
}

export function hasPages(info) {
  const { files, proxies } = pageCount(info);
  return files + proxies > 0;
}

export function PagesError({ error }) {
  return (
    <div class="settings-row settings-row--hint" role="alert">
      Couldn't load pages: {error}
    </div>
  );
}

export function PageRows({ info }) {
  return KINDS.flatMap(({ key, mount, label }) =>
    (info?.[key] || []).map((name) => (
      <a
        key={`${key}:${name}`}
        class="settings-row settings-row--nav"
        data-page-kind={label}
        data-page-name={name}
        href={u(`${mount}${encodeURIComponent(name)}/`)}
        target="_blank"
        rel="noopener"
      >
        <span class="settings-label">
          <span class="settings-title">{name}</span>
          <small>{label}</small>
        </span>
        <span class="settings-trail">
          <span class="settings-chevron" aria-hidden="true">
            ›
          </span>
        </span>
      </a>
    )),
  );
}