// Generated, do not edit. sha256:8ff8b9a894c249281ed87f26a36d73c4e403eda8ce50d7da357c4aad90e8f817
import { esc } from './escape.js';
const DEFAULT_LABELS = Object.freeze({ all: 'All', none: 'None' });
let labels = { ...DEFAULT_LABELS };
export function configureFilter({ labels: l = null } = {}) {
labels = { ...DEFAULT_LABELS, ...(l || {}) };
}
export function resolveSelection({ saved, items, initial }) {
const ids = items.map(i => i.id);
const valid = new Set(ids);
if (Array.isArray(saved)) {
const kept = saved.filter(id => valid.has(id));
if (kept.length || saved.length === 0) return new Set(kept);
}
const init = initial ? [...initial(items)].filter(id => valid.has(id)) : ids;
return new Set(init.length ? init : ids);
}
export function create(host, opts) {
const items = opts.items || [];
const selected = opts.selected instanceof Set ? opts.selected : new Set(opts.selected || []);
const dis = opts.disabled ? ' disabled' : '';
const collapsedIds = opts.collapsedIds instanceof Set ? opts.collapsedIds : new Set();
host.classList.add('fbar', 'fbar--chip', ...(opts.className ? opts.className.split(' ') : []));
const allOn = items.every(i => selected.has(i.id));
const act = ``;
const btn = (i, idx) =>
``;
host.innerHTML = act + items.map(btn).join('');
host.onclick = (e) => {
if (opts.disabled) return;
if (e.target.closest('[data-fact]')) {
opts.onChange(allOn ? new Set() : new Set(items.map(i => i.id)));
return;
}
const b = e.target.closest('[data-fi]');
if (!b) return;
const id = items[Number(b.dataset.fi)].id;
if (typeof opts.onCycle === 'function') { opts.onCycle(id); return; }
const next = new Set(selected);
if (next.has(id)) next.delete(id); else next.add(id);
opts.onChange(next);
};
}