diff --git a/src/core/client.mjs b/src/core/client.mjs index b8f5d32..88461c9 100644 --- a/src/core/client.mjs +++ b/src/core/client.mjs @@ -54,6 +54,7 @@ export default async (api, db) => { _notionTheme = notionTheme; const msg = { namespace: "notion-enhancer", + hotkey: openMenuHotkey, theme: notionTheme, icon: menuButtonIconStyle, }; @@ -129,6 +130,11 @@ export default async (api, db) => { document.querySelector(notionSidebar)?.append($menuButton); window.addEventListener("focus", () => updateTheme(true)); + window.addEventListener("message", (event) => { + if (event.data?.namespace !== "notion-enhancer") return; + if (event.data?.action === "close-menu") closeMenu(); + if (event.data?.action === "open-menu") openMenu(); + }); addMutationListener("body", () => { if ($menuModal?.hasAttribute("open")) updateTheme(); }); diff --git a/src/core/menu/components.mjs b/src/core/menu/components.mjs index 77133f6..e8720a6 100644 --- a/src/core/menu/components.mjs +++ b/src/core/menu/components.mjs @@ -492,6 +492,7 @@ function Select({ values, _get, _set, ...props }) { $select.onclick = (event) => { onclick?.(event); $popup.setAttribute("open", true); + setState({ popupOpen: true }); }; useState(["rerender"], () => { _get?.().then((value) => { @@ -503,10 +504,16 @@ function Select({ values, _get, _set, ...props }) { setTimeout(() => { $select.style.width = ""; $select.style.background = ""; + setState({ popupOpen: false }); }, 200); } else $select.innerText = value; }); }); + document.addEventListener("click", (event) => { + if (!$popup.hasAttribute("open")) return; + if ($popup.contains(event.target) || event.target === $select) return; + _set?.($select.innerText); + }); return html`