diff --git a/src/index.css b/src/index.css index 6baad17..eca6e28 100644 --- a/src/index.css +++ b/src/index.css @@ -3476,3 +3476,108 @@ details[open] > .untangled-language-bar { grid-template-columns: auto 1fr auto; } + +.untangled-topbar-menu { + position: relative; +} + +.untangled-topbar-menu-summary { + cursor: pointer; + list-style: none; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.untangled-topbar-menu-summary::-webkit-details-marker { + display: none; +} + +.untangled-topbar-menu-dropdown { + position: absolute; + right: 0; + margin-top: 0.5rem; + border-radius: 0.375rem; + background-color: rgb(255 255 255); + border: 1px solid rgb(229 231 235); + box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + z-index: 50; + font-size: 0.875rem; + width: 14rem; + overflow: hidden; +} + +@media (prefers-color-scheme: dark) { + .untangled-topbar-menu-dropdown { + background-color: rgb(31 41 55); + border-color: rgb(55 65 81); + } +} + +.untangled-topbar-menu-item { + display: flex; + width: 100%; + align-items: center; + gap: 0.75rem; + padding: 0.625rem 1rem; + text-align: left; + text-decoration: none; + color: inherit; + transition: background-color 150ms; + border: 0; + background: transparent; + cursor: pointer; +} + +.untangled-topbar-menu-item:hover { + background-color: rgb(243 244 246); + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + .untangled-topbar-menu-item:hover { + background-color: rgb(55 65 81 / 0.5); + } +} + +.untangled-topbar-menu-item-danger { + color: rgb(239 68 68); +} + +.untangled-topbar-menu-item-danger:hover { + background-color: rgb(254 242 242); +} + +@media (prefers-color-scheme: dark) { + .untangled-topbar-menu-item-danger:hover { + background-color: rgb(153 27 27 / 0.2); + } +} + +.untangled-topbar-menu-add-account-icon { + display: flex; + align-items: center; + justify-content: center; + width: 1.5rem; + height: 1.5rem; + border-radius: 9999px; + background-color: rgb(229 231 235); + color: rgb(55 65 81); +} + +@media (prefers-color-scheme: dark) { + .untangled-topbar-menu-add-account-icon { + background-color: rgb(75 85 99); + color: rgb(229 231 235); + } +} + +.untangled-topbar-menu-item-separator { + border-top: 1px solid rgb(229 231 235); +} + +@media (prefers-color-scheme: dark) { + .untangled-topbar-menu-item-separator { + border-color: rgb(55 65 81); + } +} diff --git a/src/layout.tsx b/src/layout.tsx index 8ea7aa2..a78dc49 100644 --- a/src/layout.tsx +++ b/src/layout.tsx @@ -1,5 +1,5 @@ import clsx from 'clsx'; -import { Bell, LogOut, RotateCcw, Save, Search, Settings, UserRound } from 'lucide-solid'; +import { Bell, BookMarked, LogOut, Plus, RotateCcw, Save, Search, Settings, UserRound } from 'lucide-solid'; import { A, useLocation, useNavigate } from '@solidjs/router'; import { createQuery, useQueryClient } from '@tanstack/solid-query'; import { For, Show, createEffect, createSignal, onCleanup, onMount, type Component, type JSX } from 'solid-js'; @@ -218,40 +218,55 @@ const UserProfileMenu: Component = () => { queryFn: async () => resolveActor(auth.currentDid()!), })); + const closeMenu = (e: MouseEvent) => { + const details = (e.currentTarget as HTMLElement).closest('details'); + if (details) details.open = false; + }; + return ( -
- +
+ -
-
-
{viewerQuery.data?.handle ?? auth.currentDid()}
-
{auth.currentDid()}
-
- - {(handle) => ( - { - const details = e.currentTarget.closest('details'); - if (details) details.open = false; - }} - > - - profile - - )} - - + +
+ + {(handle) => ( + <> + + + profile + + + + repositories + + + )} + + + + + settings + + + +
); @@ -335,11 +350,21 @@ const Topbar: Component = () => { return (