treefmt: apply prettier

Pure `nix fmt` output from the commit before this one — no hand edits.
203 files: 52 md, 42 tsx, 32 js, 32 css, 21 ts, 13 html, 8 json, 3 mjs.

Reproduce with `nix develop -c nix fmt` on the parent commit; the result
should be byte-identical to this tree.

None of the 13 `.prettierignore` entries appears here — verified by
intersecting the changed-file list against the ignore file, with a
control proving the intersection finds a match when one exists.
This commit is contained in:
atlas 2026-09-02 14:29:33 +02:00
commit 39b95c2ede
203 changed files with 10090 additions and 6085 deletions

View file

@ -27,29 +27,37 @@
// call site keeps working unchanged. Call configure() exactly once per
// element (throws if called twice), mirroring the old call sites.
import { el } from '../dom.js';
import { createTabStrip } from './tabs.js';
import { el } from "../dom.js";
import { createTabStrip } from "./tabs.js";
class HiveTabStrip extends HTMLElement {
configure({ tabs, defaultId, onShow }) {
if (this._api) {
throw new Error('hive-tab-strip: configure() called twice on the same element');
throw new Error(
"hive-tab-strip: configure() called twice on the same element",
);
}
const prefix = this.getAttribute('prefix');
const prefix = this.getAttribute("prefix");
if (!prefix) {
throw new Error('hive-tab-strip: missing required `prefix` attribute');
throw new Error("hive-tab-strip: missing required `prefix` attribute");
}
for (const tab of tabs) {
const a = el('a', {
class: 'hive-tab',
id: `${prefix}-tab-${tab.id}`,
href: `#${tab.id}`,
role: 'tab',
'aria-controls': `${prefix}-pane-${tab.id}`,
'data-tab': tab.id,
}, tab.label);
const a = el(
"a",
{
class: "hive-tab",
id: `${prefix}-tab-${tab.id}`,
href: `#${tab.id}`,
role: "tab",
"aria-controls": `${prefix}-pane-${tab.id}`,
"data-tab": tab.id,
},
tab.label,
);
if (tab.badgeId) {
a.append(el('span', { class: 'tab-count', id: tab.badgeId, hidden: '' }));
a.append(
el("span", { class: "tab-count", id: tab.badgeId, hidden: "" }),
);
}
this.append(a);
}
@ -57,4 +65,4 @@ class HiveTabStrip extends HTMLElement {
return this._api;
}
}
customElements.define('hive-tab-strip', HiveTabStrip);
customElements.define("hive-tab-strip", HiveTabStrip);

View file

@ -23,7 +23,9 @@
font-size: 0.85em;
letter-spacing: 0.05em;
cursor: pointer;
transition: background 100ms, color 100ms;
transition:
background 100ms,
color 100ms;
}
.hive-tab:hover {

View file

@ -27,44 +27,44 @@ export function createTabStrip(tabbar, opts = {}) {
if (!tabbar) {
return { show() {}, active: () => null };
}
const tabs = Array.from(tabbar.querySelectorAll('[data-tab]'));
const ids = tabs.map((t) => t.getAttribute('data-tab'));
const tabs = Array.from(tabbar.querySelectorAll("[data-tab]"));
const ids = tabs.map((t) => t.getAttribute("data-tab"));
const fallback = defaultId && ids.includes(defaultId) ? defaultId : ids[0];
const paneFor = (id) => document.querySelector(`[data-tab-pane="${id}"]`);
const active = () => {
const hash = location.hash.replace(/^#/, '');
const hash = location.hash.replace(/^#/, "");
return ids.includes(hash) ? hash : fallback;
};
const show = (id) => {
const target = ids.includes(id) ? id : fallback;
for (const tab of tabs) {
const tid = tab.getAttribute('data-tab');
const tid = tab.getAttribute("data-tab");
const on = tid === target;
tab.classList.toggle('hive-tab--active', on);
tab.setAttribute('aria-selected', String(on));
tab.classList.toggle("hive-tab--active", on);
tab.setAttribute("aria-selected", String(on));
const pane = paneFor(tid);
if (pane) pane.hidden = !on;
}
if (typeof onShow === 'function') onShow(target);
if (typeof onShow === "function") onShow(target);
};
// Drive every activation through the hash so deep-links + back/forward
// stay authoritative; the hashchange listener does the actual showing.
for (const tab of tabs) {
tab.addEventListener('click', (e) => {
tab.addEventListener("click", (e) => {
e.preventDefault();
const id = tab.getAttribute('data-tab');
if (location.hash.replace(/^#/, '') === id) {
const id = tab.getAttribute("data-tab");
if (location.hash.replace(/^#/, "") === id) {
show(id); // same hash → no hashchange, re-show directly
} else {
location.hash = id;
}
});
}
window.addEventListener('hashchange', () => show(active()));
window.addEventListener("hashchange", () => show(active()));
show(active()); // initial render from the current hash
return { show, active };