From e265efec0999222526ca3bc7ab4c19a3d032f405 Mon Sep 17 00:00:00 2001 From: David Hill Date: Thu, 30 Oct 2025 00:40:24 +0000 Subject: [PATCH] Add right click menu to logo --- .../app/src/component/header-context-menu.css | 39 ++++++++ packages/console/app/src/component/header.tsx | 94 ++++++++++++------- 2 files changed, 101 insertions(+), 32 deletions(-) create mode 100644 packages/console/app/src/component/header-context-menu.css diff --git a/packages/console/app/src/component/header-context-menu.css b/packages/console/app/src/component/header-context-menu.css new file mode 100644 index 00000000..ee30b10c --- /dev/null +++ b/packages/console/app/src/component/header-context-menu.css @@ -0,0 +1,39 @@ +.context-menu { + position: fixed; + z-index: 1000; + min-width: 160px; + border: 1px solid var(--color-border); + border-radius: var(--border-radius-sm); + background-color: var(--color-bg); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + padding: var(--space-1); + + @media (prefers-color-scheme: dark) { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + } +} + +.context-menu-item { + display: block; + width: 100%; + padding: var(--space-2-5) var(--space-3); + border: none; + background: none; + color: var(--color-text); + font-size: var(--font-size-sm); + font-family: var(--font-sans); + text-align: left; + cursor: pointer; + border-radius: var(--border-radius-sm); + transition: background-color 0.15s ease; + + &:hover { + background-color: var(--color-bg-surface); + } +} + +.context-menu-divider { + border: none; + border-top: 1px solid var(--color-border); + margin: var(--space-1) 0; +} diff --git a/packages/console/app/src/component/header.tsx b/packages/console/app/src/component/header.tsx index ea8921f3..943ee683 100644 --- a/packages/console/app/src/component/header.tsx +++ b/packages/console/app/src/component/header.tsx @@ -4,6 +4,8 @@ import { A, createAsync } from "@solidjs/router" import { createMemo, Match, Show, Switch } from "solid-js" import { createStore } from "solid-js/store" import { github } from "~/lib/github" +import { createEffect, onCleanup } from "solid-js" +import "./header-context-menu.css" export function Header(props: { zen?: boolean }) { const githubData = createAsync(() => github()) @@ -18,14 +20,68 @@ export function Header(props: { zen?: boolean }) { const [store, setStore] = createStore({ mobileMenuOpen: false, + contextMenuOpen: false, + contextMenuPosition: { x: 0, y: 0 }, }) + createEffect(() => { + const handleClickOutside = () => { + setStore("contextMenuOpen", false) + } + + const handleContextMenu = (event: MouseEvent) => { + event.preventDefault() + setStore("contextMenuOpen", false) + } + + if (store.contextMenuOpen) { + document.addEventListener("click", handleClickOutside) + document.addEventListener("contextmenu", handleContextMenu) + onCleanup(() => { + document.removeEventListener("click", handleClickOutside) + document.removeEventListener("contextmenu", handleContextMenu) + }) + } + }) + + const handleLogoContextMenu = (event: MouseEvent) => { + event.preventDefault() + setStore("contextMenuPosition", { x: event.clientX, y: event.clientY }) + setStore("contextMenuOpen", true) + } + return (
- - opencode logo light - opencode logo dark - +
+ + opencode logo light + opencode logo dark + +
+ + +
+ + + +
+
@@ -108,20 +151,7 @@ export function Header(props: { zen?: boolean }) {
  • - Docs -
  • -
  • - Enterprise -
  • -
  • - - - Login - - - Zen - - + Brand assets