From b826ce9c631477e2b0147027ba066ec8a93269cc Mon Sep 17 00:00:00 2001 From: nick comer Date: Wed, 1 May 2024 21:54:52 -0400 Subject: [PATCH] dark mode + a bit more polish --- popup.css | 31 +++++++++++++++-- src/popup/main.tsx | 84 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 97 insertions(+), 18 deletions(-) diff --git a/popup.css b/popup.css index 806a525..3407c77 100644 --- a/popup.css +++ b/popup.css @@ -140,6 +140,33 @@ body { background-color: white; } -@media (prefers-color-scheme: dark) { - /* Dark Mode styles go here. */ +.ht-tab:hover { + background-color: #efefef; +} + +.ht-tab-location { + color: #e9e9e9; +} + +@media (prefers-color-scheme: dark) { + html { + background-color: black; + } + + body { + background-color: #2b2b2b; + color: #f2f2f2; + } + + .ht-search-wrapper .ht-search-input { + background-color: #2b2b2b; + } + + .ht-tab-location { + color: #e9e9e9; + } + + .ht-tab:hover { + background-color: #4e4e4e; + } } diff --git a/src/popup/main.tsx b/src/popup/main.tsx index 4789217..d017468 100644 --- a/src/popup/main.tsx +++ b/src/popup/main.tsx @@ -33,7 +33,7 @@ function useBackgroundPage(): BackgroundPage { resolve: (value: T | PromiseLike) => void; reject: (reason?: any) => void; }; - const waiter = new Map>(); + const waiter = useRef(new Map>()); useEffect(() => { const msgListener: Parameters< typeof port.current.onMessage.addListener @@ -41,11 +41,11 @@ function useBackgroundPage(): BackgroundPage { if (!("id" in message) || typeof message.id !== "number") { return; } - const promfinishers = waiter.get(message.id); + const promfinishers = waiter.current.get(message.id); if (!promfinishers) { return; } - waiter.delete(message.id); + waiter.current.delete(message.id); if (message.error) { promfinishers.reject(message.error); } else { @@ -64,14 +64,12 @@ function useBackgroundPage(): BackgroundPage { listTabs() { return new Promise((resolve, reject) => { const id = ++msgId.current; - waiter.set(id, { + waiter.current.set(id, { reject, resolve(value) { - console.timeEnd(`bgpage:rpc:listTabs:${id}`); resolve(value as chrome.tabs.Tab[]); }, }); - console.time(`bgpage:rpc:listTabs:${id}`); port.current.postMessage({ rpc: "listTabs", id }); }); }, @@ -86,11 +84,14 @@ const focusTab = (tabId: number, windowId: number): void => { const HighlightMatches: FunctionComponent<{ text: string; - match?: FuseResultMatch; + match?: Omit; }> = ({ text, match }) => { if (!match) { return <>{text}; } + if (text.toLowerCase().includes("spec.matrix")) { + console.log({ text, match }); + } const parts: JSX.Element[] = []; const indicies = structuredClone(match.indices) as RangeTuple[]; let currentPart = ""; @@ -158,7 +159,29 @@ function faviconURL(t: chrome.tabs.Tab, size: number): string | undefined { return url.toString(); } +const prefersDarkMode = (): boolean => { + return window.matchMedia("(prefers-color-scheme: dark)").matches; +}; + +const useDarkMode = (): boolean => { + const [dm, setdm] = useState(() => { + return prefersDarkMode(); + }); + useEffect(() => { + const mql = window.matchMedia("(prefers-color-scheme: dark)"); + const onChange = (ev: MediaQueryListEvent) => { + setdm(ev.matches); + }; + mql.addEventListener("change", onChange); + return () => { + mql.removeEventListener("change", onChange); + }; + }, []); + return dm; +}; + const Popup: FunctionComponent = () => { + const darkMode = useDarkMode(); const [tabSelector, setTabSelector] = useState(0); const [tabs, setTabs] = useState([]); const [searchQuery, setSearchQuery] = useState(""); @@ -179,7 +202,6 @@ const Popup: FunctionComponent = () => { if (tabs.length === 0) { return; } - console.log({ tabs }); }, [tabs]); useEffect(() => { @@ -246,7 +268,6 @@ const Popup: FunctionComponent = () => { const bgpage = useBackgroundPage(); useEffect(() => { - console.time("queryTabs"); bgpage .listTabs() .then((returnedTabs) => { @@ -255,9 +276,7 @@ const Popup: FunctionComponent = () => { } setTabs(returnedTabs); }) - .finally(() => { - console.timeEnd("queryTabs"); - }); + .finally(() => {}); }, []); const selectedTabEle = useRef(null); @@ -273,10 +292,29 @@ const Popup: FunctionComponent = () => { return (
-
+
+
+ + + +
{ />

+
+ Open Tabs ({tabs.length}) +
{ ref={i === tabSelector ? selectedTabEle : undefined} style={{ padding: "10px", - backgroundColor: i === selectedTab ? "#e9e9e9" : undefined, + cursor: "pointer", + backgroundColor: + i === selectedTab + ? darkMode + ? "#535353" + : "#e9e9e9" + : undefined, // favicon support ...(enableFavicons @@ -344,19 +391,24 @@ const Popup: FunctionComponent = () => { }} > {favicURL && ( -
+
)} -
+
{