From 4ca9e4a4fd974a58b81b4cb91e5bab1741a76ada Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Sat, 31 Dec 2022 16:18:08 -0800 Subject: [PATCH] Keeping utility for accordion and observer for the future. --- src/lib/util/accordion.ts | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/lib/util/accordion.ts diff --git a/src/lib/util/accordion.ts b/src/lib/util/accordion.ts new file mode 100644 index 0000000..bfb18b8 --- /dev/null +++ b/src/lib/util/accordion.ts @@ -0,0 +1,27 @@ +export default function (node: HTMLElement) { + const setHeight = (detail: HTMLDetailsElement, open = false) => { + detail.open = open; + const rect = detail.getBoundingClientRect(); + detail.dataset.width = `${rect.width}`; + detail.style.setProperty(open ? `--expanded` : `--collapsed`, `${rect.height}px`); + }; + const RO = new ResizeObserver((entries) => { + return entries.forEach((entry) => { + const detail: HTMLDetailsElement = entry.target; + const width: number = parseInt(detail.dataset.width, 10); + if (width !== parseInt(entry.contentRect.width, 10)) { + detail.removeAttribute('style'); + setHeight(detail); + setHeight(detail, true); + detail.open = false; + } + }); + }); + RO.observe(node); + + return { + destroy() { + RO.unobserve(node); + } + }; +}