function conditionalShow(
element,
{
label = "Show",
checked = false,
returns = (checked, element) => element?.value || element,
bindInput = true,
showValueSummary = true
} = {}
) {
const show = htl.html`${label}`;
const container = htl.html`<div>${element}<div>`;
const valueSummary = htl.html`<output></output>`;
const target = htl.html`<details ${checked ? { open: true } : {}} >
<summary>${show} ${showValueSummary ? valueSummary : ""}</summary>
${container}
</details>`;
function updateValueSummary() {
if (
showValueSummary &&
target.value &&
target.value &&
Array.isArray(target.value)
) {
valueSummary.innerHTML = `(Returns ${target.value.length} elements)`;
} else {
valueSummary.innerHTML = ``;
}
}
function set(evt) {
if (evt) {
evt.stopPropagation();
}
target.value = returns(target.open, element);
target.checked = target.open;
console.log("target.open", target.open, target);
target.dispatchEvent(new Event("input", { bubbles: true }));
updateValueSummary();
}
set();
if (bindInput) {
element.addEventListener("input", set);
}
target.addEventListener("toggle", () => {
target.checked = target.open;
});
return target;
}